前言
我在使用MySQL时,遇到了两个问题。一是在插入中文数据时,无法输入中文。二是在select的时候,查出来的中文数据是空的(因为插入时为空),然后我就使用Navicat连接数据库添加了中文数据,再到docker中查询,就发现了乱码
问题。
排查原因
乱码一般都是因为编码引起的,所以我们来查一下数据库的编码
show variables like '%character%';
可以看到 docker 启动的 mysql 这里有的编码是 latin1
,我们先把这里设置成utf8
.
解决方式
1 无法输入中文
使用如下命令进入容器,但这只是临时的
docker exec -it mysql env LANG=C.UTF-8 /bin/bash
2.1 统一客户端与连接编码为utf8
登入数据库执行以下命令
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
-- 或者使用下面的命令同时统一编码(以下和以上命令选择一种执行即可,效果一样)
set names ‘utf8’;
2 修改mysql的配置文件
-
退出数据库,修改
my.cnf
文件
-
出现
bash: vim: command not found
提示,需要安装一下vim,使用如下命令apt-get update apt-get install vim -y
然后重新执行vim命令即可
-
修改文件内容
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL [mysql.server] default-character-set = utf8 [mysqld_safe] default-character-set = utf8 [client] default-character-set = utf8
-
重启mysql
# exit退出容器 docker restart mysql
-
登录mysql查看是否修改成功
docker exec -it mysql /bin/bash mysql -u root -p