MySql Docker 查询中文乱码

在使用 Docker 执行 MySQL 容器时,如果查询中文出现乱码,可以按照以下步骤解决问题:

设置 MySQL 字符集:

在启动 MySQL 容器时,通过环境变量设置 MySQL 的默认字符集为 utf8mb4,例如:

1
docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

配置 MySQL 客户端字符集:

进入 MySQL 容器后,在 MySQL 客户端中设置字符集:

1
docker exec -it mysql mysql -uroot -p

然后在 MySQL 提示符下执行以下命令:

1
SET NAMES utf8mb4;

修改 MySQL 配置文件:

你也可以通过修改 MySQL 配置文件来永久性地设置字符集。创建一个自定义的 MySQL 配置文件,例如 my.cnf:

1
2
3
4
5
6
7
8
9
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

然后在启动容器时挂载这个配置文件:

1
docker run --name mysql -v /path/to/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

检查数据库和表的字符集:

确保你使用的数据库和表也设置为 utf8mb4 字符集:

1
2
3

ALTER DATABASE mydb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

通过上述步骤,应该可以解决在 Docker 容器中运行 MySQL 时查询中文乱码的问题。