docker的mysql容器导入、导出(使用mysqldump)sql文件中文乱码问题-设置字符集

时间:2024-10-14 11:00:04

前情提要

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文件时数据中的中文已经不会乱码了,但字段注释还是拉丁文。因为我的数据库字段不是很多,注释乱码不太影响什么,所以我目前还没有特意解决这个问题,如果有解决方案欢迎留言嘻嘻嘻。