环境
- CentOS 7
- mysql
- docker
问题描述
查询数据库时,发现服务器端数据出现中文乱码问题,所有中文显示成问号(??),导致我的接口访问使用从数据库中读取出来的数据无法处理。
解决过程
使用Docker搭建mysql容器,和不使用Docker部署mysql数据库,解决中文乱码问题有点不一样。使用Docker部署mysql,如果出现中文乱码问题,要找到mysql所在容器里的配置文件,修改配置文件。
CentOS7 安装Docker + Docker部署mysql过程:
https://blog.csdn.net/weixin_42956047/article/details/103810144
进入mysql容器:
docker exec -it 容器名/bin/bash //进入容器
如:
docker exec -it image_mysql /bin/bash //进入容器
连接mysql:使用一下命令,输入root用户的密码后,mysql连接成功。
mysql -u root -p
查看当前数据库字符集:
SHOW VARIABLES LIKE 'character_set_%';//查看数据库字符集
SHOW VARIABLES LIKE 'collation_%';
图上的第一个 connection 就是我们通过workbench等客户端连接的时候指定的编码。
外部访问数据乱码的问题就出在这个connection连接层上。
注意: 如果连接mysql后,修改这些变量的值为“utf8”,当重新来连接mysql后,再次查看当前的值,这些值又被重置为上图编码格式了,不能从根本上解决问题。
修改mysql的配置文件
先进去mysql容器。
注意:不输入 mysql -u root -p(即登录数据库)
配置文件在etc/mysql/myconf.d/my.cnf
(文件名可能是mysql.cnf)
编辑配置文件:vi mysql.cnf
,在使用docker容器时键入vim命令时提示:
在容器中安装vim:
在vim命令可用后,在文件中添加以下代码:
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysql_safe]
default-character-set = utf8
[client]
default-character-set = utf8
#在标签下添加以下设置
[mysqld]
default-character-set = utf8
character_set_server = utf8
保存并退出。
连接mysql后,检查mysql字符集编码,看看是否变化:
验证数据库里面的中文字段是否还乱码(出现??):
参考:https://blog.csdn.net/qq_35765928/article/details/87880291