docker mysql 中文乱码

原创
admin 4个月前 (06-17) 阅读数 174 #Docker
文章标签 Docker

标题:解决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字符集,这样就能保证中文字符的正确存储和显示。


本文由IT视界版权所有,禁止未经同意的情况下转发

热门