docker-mysql-记录一次中文乱码的问题。

1. docker pull mysql:5.7

2. docker run -p 3308:3306 --name ST_DB -e MYSQL_ROOT_PASSWORD=xxx -v /etc/localtime:/etc/localtime -d  mysql:5.7

3. docker cp /qi/st_video_db.sql ST_DB:/st_video_db.sql

4. create database st_video_db DEFAULT CHARSET utf8;

5. source st_video_db.sql;

然后启动java客户端,网页html请求java服务器返回的是中文乱码,但是在服务器命令行 select * from folder_info 查看数据又是中文正常。

使用:SHOW VARIABLES LIKE 'character_set_%';

 可以看到,mysql 默认为拉丁文。

创建容器的时候,初始化mysql的字符集为utf8mb4

docker run -p 3308:3306 --name ST_DB -e MYSQL_ROOT_PASSWORD=@FanQi520 -v /etc/localtime:/etc/localtime -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

再使用:SHOW VARIABLES LIKE 'character_set_%'; 查看

character_set_server 已经变为 utf8mb4

但是,character_set_client 和 character_set_connection 还是拉丁文。

客户端请求还是返回中文乱码(其实是阿拉伯拉丁文)

然后参考这篇文章:https://www.cnblogs.com/qiaoxin/p/10844492.html

直接去修改docker容器中mysql的配置文件。

结果docker 启动容器报错,使用docker logs 容器名字:

 参考这位大神文章,在不启动容器的情况下,修改mysql容器的配置文件:https://blog.csdn.net/Cky079/article/details/88535536?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai

把后面的配置删掉,修改后如图片所示:

docker启动mysql容器。

 使用:SHOW VARIABLES LIKE 'character_set_%'; 查看mysql字符集配置,可以看到配置都正确了,都是utf8的配置。

 

客户端请求还是返回乱码,这时候在linux上用命令行select * from folder_info,命令窗口看到的数据也是拉丁文乱码。

这时候我把数据库的数据删掉,重新 source st_video_db.sql; 

客户端请求回来的就是正常的中文了。问题解决。

原文地址:https://www.cnblogs.com/qi-dev/p/14277547.html