插件窝 干货文章 docker中mysql乱码怎么办

docker中mysql乱码怎么办

MySQL 字符集 utf 容器 180    来源:    2025-05-02

Docker中MySQL乱码问题解决方案

MySQL在Docker中出现乱码通常是由于字符集设置不正确导致的。以下是几种解决方法:

1. 启动容器时指定字符集

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

2. 修改MySQL配置文件

创建自定义配置文件my.cnf

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

然后挂载到容器中:

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

3. 已运行容器的解决方案

如果容器已经在运行:

  1. 进入容器:
docker exec -it some-mysql bash
  1. 登录MySQL:
mysql -u root -p
  1. 执行以下SQL命令:
SET NAMES utf8mb4;
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 检查当前字符集设置

在MySQL客户端中执行:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

5. 确保客户端连接使用正确字符集

在应用程序连接字符串中添加字符集参数,例如: - JDBC: ?useUnicode=true&characterEncoding=UTF-8 - PHP PDO: charset=utf8mb4

注意事项

  1. 推荐使用utf8mb4而不是utf8,因为utf8mb4支持完整的Unicode字符集(包括emoji)
  2. 确保Docker容器和宿主机的locale设置一致
  3. 如果数据已经存在乱码,可能需要导出数据后重新导入

通过以上方法,应该能够解决Docker中MySQL的乱码问题。