最近遇见了一个很奇怪的问题
从数据库中读取中文字符的时候,会出现乱码问题
首先一步一步检查字符编码问题
一开始数据库是用Navicat创建的
可以看出数据库中的格式是UTF-8
JDBC的连接字符集格式也是UTF-8
文件编码也是UTF-8
打印表中一行数据测试,原数据与打印结果如下
发现在Navicat中是正常显示,但是最后获取到的中文是呈现乱码形式
为了进一步定位问题,使用CMD查看数据库内容
发现在CMD中查看,确实是以乱码形式存储
使用show variables like "character%";
查看编码格式,如下所示
使用SET NAME GBK
尝试,发现仍然不行
最后使用CMD规定格式重新建表,发现在CMD里显示以及程序中读取都是正确结果
但是我不可能每次都需要在CMD中创建,这太繁琐,此时使用Navicat重新创建一个数据库
发现程序以及CMD读取都依旧乱码,此时发现用Navicat读取之前CMD创建的数据库,中文也是乱码
问题好像慢慢地开始明朗化了,此时在Navicat中输入show variables like 'char%'
发现在CMD中显示的UTF8不同,这里是latin1,使用SET NAMES UTF8
再查看一次
以为万事大吉,重新插入一条记录,读取依旧乱码,原因可能是Navicat的字符集无法修改,因为我重新启动了一次发现没有变化。
最后无奈,将编码方式从UTF-8改为自动,使用SET NAMES UTF8
再查看一次
此时能够正常显示插入的中文,我不理解为什么,不信邪,又重新安装了一次,但是还是用UTF-8编码却实际是latin1,弄了一天最后还是只能用自动来解决,具体原因目前依旧没有得到解释,希望有懂哥看到了能教我一下。