完美解决IDEA/MySQL/Navicat中文乱码情况
问题描述:
昨天在将数据库数据显示在前端页面时出现了中文乱码,以为是前端页面的问题。经查证
前端页面
yml配置文件
都没有问题,所以我sout打印了一下从数据库取出来的中文数据
发现取出来的时候就乱码了。看来问题出在数据库这边。
查看数据库:
在Navicat里新建查询
SHOW VARIABLES LIKE 'character%';
结果如下
明显是编码问题。server、results、connection、client全是latin1。我们要将它们全部改成utf8。
我的数据库版本是5.6.43
我们找到数据库的安装路径。
用记事本编辑my.ini。如果没有my.ini,复制一份my_default.ini然后将它们更名为my.ini。在my.ini中添加如下代码:
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
保存退出,win+R。运行services.msc
找到mysql,重启服务:
有趣的地方来了:
我再次在Navicat里检查字符编码
SHOW VARIABLES LIKE 'character%';
结果发现它一点也没变!!!!!!
后来我又在这里折腾了好久,浪费了大量的时间,它还是没变。参考别人的建议
需要新建一个数据库,新的数据库的编码才会改变过来
我新建了一个数据库,发现还是不行。
后来突发奇想,我没在Navicat上查了,我在命令行里试试。
win+R CMD 回车
敲入:
start mysql
SHOW VARIABLES LIKE 'character%';
嘿!!!合着已经改过来了,Navicat它在骗我,浪费了我大量的时间
Navicat和Mysql编码不一致
接下来就来到了Mysql和Navicat编码不一致的情况了。很多朋友都说要新建数据库编码才会变,之前被证实了不行
解决办法:新建连接
参考了一位网友的方法,我在Navicat里新建一个连接试试。
我最初的连接是127.0.0.1
新建连接
编码选择自动
输入用户名密码回车,新的连接localhost_3306被创建
localhost_3306和127.0.0.1都是本地连接,之前创的数据库和表都是相同的,IDEA里一开始就写的
所以这里大家也不用担心。
然后我们在localhost_3306这个连接里新建查询
SHOW VARIABLES LIKE 'character%';
没问题了!!
最后需要注意的地方
在这里已经没有问题了,但是我再次sout时,发现输出的中文数据还是乱码。然后我打开localhost_3306中的数据库,发现localhost_3306中的表全部乱码了。虽然结构都和127.0.0.1一致,但是localhost_3306里的乱码。这里只需要重新编辑一下这些数据然后保存,sout,没问题了
至此乱码的问题全部解决了
总结一下我们这个问题困扰我们的几个点
- 数据库编码不是utf8。 参照上文,在my.ini中进行修改
- 设置了my.ini,但是Navicat中的编码依然没变。其实已经改变了,mysql和Navicat的编码显示不一致
- 在Navicat中新建数据库,编码还是不符合。参照上文,不要新建数据库,而是新建本地连接
- 新建本地连接后,sout依然乱码。参照上文,新连接里的数据可能乱了,重新编辑一次然后保存。再sout就不会出错了
第一次发文章,如果有问题,还请多多指教
参考:
参考的文章,直接点击链接跳转或复制下方链接
https://blog.youkuaiyun.com/TIANTIANDOUNITIAN/article/details/100763005