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 容器名字:
把后面的配置删掉,修改后如图片所示:
docker启动mysql容器。
使用:SHOW VARIABLES LIKE 'character_set_%'; 查看mysql字符集配置,可以看到配置都正确了,都是utf8的配置。
客户端请求还是返回乱码,这时候在linux上用命令行select * from folder_info,命令窗口看到的数据也是拉丁文乱码。
这时候我把数据库的数据删掉,重新 source st_video_db.sql;
客户端请求回来的就是正常的中文了。问题解决。