We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在工作中使用 docker-compose 来启动 MySQL 容器时,由于没有配置字符集,出现以下问题:
这是原来的 docker-compose.yaml 文件:
version: "2" services: mysql: container_name: mysql-name image: mysql volumes: - ./mysql:/var/lib/mysql ports: - "127.0.0.1:3308:3306" environment: - MYSQL_ROOT_PASSWORD=000000 restart: always
以交互模式进入容器:
docker exec -it containerName sh
进入 MySQL 终端:
mysql -u userName -p
选择数据库后,执行下面的命令查看字符集情况, 发现基本都是 latin1:
SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%';
参考网上的教程修改:
# 解决外部访问数据乱码问题 SET NAMES 'utf8'; # 上面这条命令相当于下面的三条命令 SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; # 如果已经建立了数据库,可以通过以下语句修改字符集 alter database name character set utf8; # 修改数据库 alter table type character set utf8; # 修改表 alter table type modify type_name varchar(50) CHARACTER SET utf8; # 修改字段 # 修改配置文件,进入容器后找到:etc/mysql/mysql.conf.d/mysqld.cnf [mysql] default-character-set = utf8 [mysql.server] default-character-set = utf8 [mysqld_safe] default-character-set = utf8 [client] default-character-set = utf8 [mysqld] default-character-set = utf8 character_set_server = utf8
执行以上命令后,再查看字符集,发现大部分都修改为 utf-8 了,在网页端的中文也能正常显示了。
如果想要在 MySQL 终端中能够输入中文,还需要按下面的方式进入终端:
LANG=C.UTF-8 mysql -u username -p
在停止容器后再启动时,出现容器一直处于 restarting 状态的情况,执行这条命令来查看指定容器日志:
docker logs --tail 50 --follow --timestamps containerName
发现错误:unknown variable 'default-character-set=utf8'
unknown variable 'default-character-set=utf8'
这时因为无法进入容器来修改 MySQL 的配置文件,只能先删除容器。
修改配置文件:新添加的内容中,删除 [mysqld] 标签下的 default-character-set=utf8 ,保留 character_set_server=utf8 ,删除其它标签及内容。
default-character-set=utf8
character_set_server=utf8
[mysqld] character_set_server = utf8
通过挂载 volume 的方式来使用自定义的配置文件,修改好后的 docker-compose.yaml 文件:
version: "2" services: mysql: container_name: mysql-name image: mysql volumes: - ./mysql:/var/lib/mysql - ./mysql/conf:/etc/mysql/mysql.conf.d ports: - "127.0.0.1:3308:3306" environment: - MYSQL_ROOT_PASSWORD=000000 - LANG=C.UTF-8 restart: always
一个 docker-compose.yaml 中可能有多个服务,可以通过这条命令来启动指定服务:
docker-compose up -d mysql
这时再查看字符集,除了 character_set_filesystem 外已全部是 utf-8,进入终端时不指定 LANG 也能输入中文。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
问题
在工作中使用 docker-compose 来启动 MySQL 容器时,由于没有配置字符集,出现以下问题:
这是原来的 docker-compose.yaml 文件:
解决过程
以交互模式进入容器:
docker exec -it containerName sh
进入 MySQL 终端:
选择数据库后,执行下面的命令查看字符集情况, 发现基本都是 latin1:
参考网上的教程修改:
执行以上命令后,再查看字符集,发现大部分都修改为 utf-8 了,在网页端的中文也能正常显示了。
如果想要在 MySQL 终端中能够输入中文,还需要按下面的方式进入终端:
新的问题
在停止容器后再启动时,出现容器一直处于 restarting 状态的情况,执行这条命令来查看指定容器日志:
发现错误:
unknown variable 'default-character-set=utf8'
这时因为无法进入容器来修改 MySQL 的配置文件,只能先删除容器。
修改配置文件:新添加的内容中,删除 [mysqld] 标签下的
default-character-set=utf8
,保留character_set_server=utf8
,删除其它标签及内容。通过挂载 volume 的方式来使用自定义的配置文件,修改好后的 docker-compose.yaml 文件:
一个 docker-compose.yaml 中可能有多个服务,可以通过这条命令来启动指定服务:
这时再查看字符集,除了 character_set_filesystem 外已全部是 utf-8,进入终端时不指定 LANG 也能输入中文。
The text was updated successfully, but these errors were encountered: