这是一个令我难忘的故事!!!
目录
前言
- 这还得从昨天学习的时候说起,我是在跟着视频学习,视频中往数据库中写入的都是非中文,然后我就感觉都用 zhangsan 这个拼音了都不用中文,这里一定有坑,得尝试着踩一踩,果不其然问题来了,我在 IDEA 中写入的数据库的数据,在 IDEA 中都可以正常的写入和读取,但是当我打开 Navicat 查看刚才写入的数据,我的天,什么鬼,乱码了,当时觉得这个问题是小问题,度娘一下应该会有答案的,下面开启事故经过。
- 事先说明一下,我用的 mysql 8.0,使用 c3p0、JDBC 进行连接的
一、产生乱码问题一般可能会出现的几种情况
1. 查看是不是是因为 IDEA 编码设置的问题【我感觉这种情况应该很少,默认的就可以】
- 文件 - -》 设置 - -》编辑器 - -》 文本编码【都设置成为UTF-8后】- -》 应用 - - 》确定
- 不管是不是这里出现的问题,都可以查看一下,是不是这里出现的问题,一般情况控制台输出是正常的就是没有问题,可以先忽略这个
2. 查看数据库的编码是否正确【这个确实有必要核对一下】
- 我的在 Navicat 中查看的
- 这里只要字符集是utf8的就好了utf8mb4的也是可以的,亲测可行,下面的排序规则可以不填忽略我的这个,或者很多都是 utf8_general_ci,都是可以的,这个我没有试,如果觉得是这个问题你们可以尝试,我觉得这个不是关键点,使用默认就好了
- 下面是通过 cmd 查看的数据库的设置,都是utf8没毛病啊
show variables like ‘%char%’;
- 到了这里如果还觉得表的字段有问题,可以看一下表的字段的编码,同样没有毛病
3. 查看代码中是否存在问题
- 我的 URL 是这样的:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
- 注意:
test:是数据库名
serverTimezone=UTC:因为我的是 mysql 8.0 所以需要加上这个时区,不然连接会报错- 一般来说经过这些设置后编码都是一致的了,不应该会出现乱码【我的就很离谱,还是乱码】
- 甚至怀疑是框架的原因,不用框架写也是会出现同样的问题
二、再说一下我这个不属于一般范畴的情况
- 在查找问题所在的原因的时候基本大部分都是上面的情况,我已经和上面设置都相同了,但是还是不能行,都已经到了这种地步,肯定不是上面的情况出现问题了嘛,下面我们就需要换一个思路去思考这个问题了,既然两个地方的编码都是相同的UTF-8,还都是在自己的底盘查看自己弄的数据是正常的,别的就会出现乱码,这里我就感觉肯定是他们两个之间有一个出了问题嘛。
- 在这里我要特别感谢:
广州- Java-hyq
这位大佬,我在群里面问这个问题的时候积极的帮助我,特别感谢,虽然最后问题也没能解决,但是大佬也帮助我进一步打开别的思路了嘛,还是收货很大的,下面是这位大佬在群里面的头像和名称的截图,没错!小白就是我
从这里开始我们就换个思路想问题
1. cmd来看看,到底谁的数据才是正确的
- 既然各自的数据编码都是属于UTF-8,那么谁出了问题也不好说,我们就找第三方在做一个证明人,这个人就是cmd
- 操作步骤:
1、启动 cmd,为了保险呢起见,我们先看看 cmd 的编码chcp
发现不是 (65001)UTF-8 的编码,应该不会有大哥故意给自己电脑设置UTF-8的编码吧【我觉得这不是一个理智的选择】,既然不是我们就先给设置成为(65001)UTF-8 的编码chcp 65001
2、先需要把目录跳转到 mysql 安装目录下的 bin 目录cd D:\Program_Files_self\MySQL\bin
3、然后登陆 mysqlmysql -u root -p
,然后输入密码
4、先你看一下 mysql 中有哪些数据库show databases;
5、然后跳转到需要跳转的数据库use test_xy;
6、然后执行SQL语句select * from account;
- 看到这里,有没有觉得问题变得清晰了,这不就是 IDEA 中写入的数据没有乱码,是UTF-8 嘛,反而是 Navicat 中手动添加的数据出现了乱码,这里我就感觉是Navicat 的问题,但是我并不是这么的肯定,因为比较晚了,这个问题也搞了大半天还是没有结果,我就决定今天先洗洗睡,明天上午了再看看,到底是不是Navicat 的问题
- 当时也有的群友说得用 PowerShell()看,我也尝试了看了,和 cmd 的结果一样,操作也是相同的【还请大哥们忽略我的手残,错了很多,哈哈哈哈】
2. 既然我们已经认定是Navicat 的问题,我们就对Navicat 下手
- 第二天一早,我就开始找 Navicat 的毛病,自此期间我甚至又安装了一个Navicat,发现还是不行,排除Navicat 软件的问题
- 然后我就继续度娘,寻找解决的方法,果真,还真就被找到了,在一个评论中,发现说Navicat 连接设置不要设置UTF-8 的编码,选择自动比较好,然后我就抱着试一试的态度,去修改了连接设置,我X,竟然真的是这个原因,成了。心中疯狂的喜悦!!!
- 这次的坑爬的比较辛苦,收获也是很棒的,这样会让我印象很深。
- 下面是设置步骤:鼠标右键连接名 - -》编辑连接(需要先断开连接)- -》高级 - -》编码(设置为:自动)
解决步骤:↑ ↑ ↑ ↑ ↑ ↑ | 对比图 ↓ ↓ ↓ ↓ ↓ ↓
可以看一下前后的对比:
解决前:
- Navicat 中的数据
- IDEA 中的数据
解决后:
- Navicat 中的数据
- IDEA 中的数据
一点点笔记,以便以后翻阅。