MySQL在Docker中出现乱码通常是由于字符集设置不正确导致的。以下是几种解决方法:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
创建自定义配置文件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
如果容器已经在运行:
docker exec -it some-mysql bash
mysql -u root -p
SET NAMES utf8mb4;
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
在MySQL客户端中执行:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
在应用程序连接字符串中添加字符集参数,例如:
- JDBC: ?useUnicode=true&characterEncoding=UTF-8
- PHP PDO: charset=utf8mb4
utf8mb4
而不是utf8
,因为utf8mb4
支持完整的Unicode字符集(包括emoji)通过以上方法,应该能够解决Docker中MySQL的乱码问题。