docker mysql 中文乱码
原创标题:解决Docker MySQL中文乱码问题
在使用Docker部署MySQL数据库时,或许会遇到数据存储或查询时出现中文乱码的问题。这是归因于默认情况下,MySQL并不赞成中文字符编码。本文将指导你怎样配置MySQL以正确处理和显示中文字符。
步骤1:创建MySQL容器
首先,确保你在启动MySQL容器时指定了正确的字符集。在Dockerfile或者docker-compose.yml文件中添加以下配置:
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=your_root_password
ENV MYSQL_DATABASE=testdb
ENV MYSQL_USER=testuser
ENV MYSQL_PASSWORD=testpassword
ENV CHARACTER_SET_SERVER=utf8mb4
ENV COLLATION_SERVER=utf8mb4_unicode_ci
步骤2:启动并初始化数据库
启动容器时,使用上面配置的环境变量:
docker run -e MYSQL_ROOT_PASSWORD=your_root_password -e MYSQL_DATABASE=testdb -e MYSQL_USER=testuser -e MYSQL_PASSWORD=testpassword -e CHARACTER_SET_SERVER=utf8mb4 -e COLLATION_SERVER=utf8mb4_unicode_ci -d mysql:5.7
步骤3:连接到MySQL并设置字符集
通过命令行工具(如mysql或docker exec)连接到你的MySQL容器,并为新创建的数据库设置字符集:
docker exec -it your_mysql_container_name mysql -uroot -p
MariaDB [(none)]> SET NAMES utf8mb4;
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS your_database_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_user'@'%' IDENTIFIED BY 'your_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
步骤4:验证和测试
现在你可以插入中文字符到数据库中,然后查询它们,应该不会出现乱码问题:
MariaDB [(none)]> INSERT INTO your_table (column_name) VALUES ('你好,世界');
MariaDB [(none)]> SELECT * FROM your_table;
+-----------------+
| column_name |
+-----------------+
| 你好,世界 |
+-----------------+
1 row in set (0.00 sec)
总结
通过以上步骤,你应该已经成就解决了Docker MySQL中文乱码的问题。确保在创建数据库、用户和表时都使用utf8mb4字符集,这样就能保证中文字符的正确存储和显示。