前情提要
docker mysql5.7.26容器,使用挂载文件夹的方式导入sql文件,使用mysqldump导出sql文件,由于mysql容器字符集、导出时字符集设置错误,中文导入再导出就变成拉丁文了。
设置容器字符集
查看容器字符集方法:
#进入name为mysql的容器的命令行,容器需要处在正在运行的状态
docker exec -it mysql /bin/bash
#连接mysql
mysql -u用户名 -p #然后需要输入密码,回车
#查看mysql字符集
show variables like '%char%’;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
不做设置的话,容器初始字符集中database这一项是拉丁文,如下:
创建mysql容器的时候添加“–character-set-server=utf8mb4 —collation-server=utf8mb4_unicode_ci”两个命令,即可设置容器字符集:
#命令行创建mysql容器
docker run -it -d -p 127.0.0.1:3306:3306/tcp --name mysql mysql:5.7.26 --character-set-server=utf8mb4 —collation-server=utf8mb4_unicode_ci
- 1
- 2
- 3
#docker-compose创建mysql容器
version: '3'
services:
mysql:
image: mysql:5.7.26
container_name: mysql
ports:
- 0.0.0.0:3306:3306/tcp
network_mode: "bridge"
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
此时容器字符集中database项已变为utf8。
使用mysqldump导出时设置字符集
#在mysql容器中存储所有结构+数据到目录/var/lib/mysql/
mysqldump -uroot -proot123 --default-character-set=latin1 --set-charset=false --all-databases> /var/lib/mysql/
- 1
- 2
- 3
后记
做完以上两个设置,导入导出sql文件时数据中的中文已经不会乱码了,但字段注释还是拉丁文。因为我的数据库字段不是很多,注释乱码不太影响什么,所以我目前还没有特意解决这个问题,如果有解决方案欢迎留言嘻嘻嘻。