在 Docker 中运行 MySQL 时出现中文乱码,通常是由于字符集设置不正确导致的。MySQL 默认的字符集可能不是 UTF-8,或者客户端连接时未指定正确的字符集。
docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-p 3306:3306 \
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-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-p 3306:3306 \
-v /path/to/my.cnf:/etc/mysql/conf.d/my.cnf \
mysql:tag
docker exec -it mysql-container bash
mysql -u root -p
SET NAMES utf8mb4;
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
确保客户端连接时也指定了正确的字符集,例如在 JDBC 连接字符串中添加:
?useUnicode=true&characterEncoding=UTF-8
或在 Python 连接时指定:
charset='utf8mb4'
登录 MySQL 后执行以下命令验证字符集设置:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
确保以下变量值为 utf8mb4
:
- character_set_client
- character_set_connection
- character_set_database
- character_set_results
- character_set_server
utf8mb4
而不是 utf8
,因为 utf8mb4
支持完整的 Unicode 字符集(包括 emoji 等)通过以上方法,应该能够解决 Docker 中 MySQL 的中文乱码问题。