MySQL插入中文乱码问题

今天跟着慕课SpringBoot练习的时候,数据库插入中文遇到了编码错误问题,

.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1366, SQLState: 22001

保存中文数据,发现在数据库中显示为???

最后上网一一排查,解决了这些问题。

参考的文章如下:https://blog.csdn.net/blueheart20/article/details/52385142

文中的环境是在centos下的,我的问题是在windows下的。

排查过程如下:

1. IDE的编码,是否为UTF-8。

解决方案:

以IDEA为例,File->Settings->Editor->FileEncodings,三个关于编码的属性,

FileEncoding,ProjectEncoding,Default  encoding for properties全部换成UTF-8

2.代码里的数据库连接URL尾部是否加上了编码设置,&characterEncoding=utf-8

解决方案:jdbc:mysql://localhost:3306/luckymoney?serverTimezone=GMT%2B8&characterEncoding=utf-8

3.本地MySQL的编码格式是否为UTF-8

解决方案:在控制台中,登入mysql,使用show variables like 'char%';命令去查看本机的mysql编码格式

然后把不是UTF-8的全部设置成UTF-8,如果只有部分,可以自己筛选

代码如下:

set character_set_client = utf8;

set character_set_server = utf8;

set character_set_connection = utf8;

set character_set_database = utf8;

set character_set_results = utf8;

set collation_connection = utf8_general_ci;

set collation_database = utf8_general_ci;

set collation_server = utf8_general_ci;

4.已经创建好的数据库编码是否为UTF-8

5.已经创建好的表的编码是否为UTF-8

解决方案:4和5中,我都是在navicat中进行操作的,

MySQL插入中文乱码问题MySQL插入中文乱码问题

修改操作比较简单,不多赘述了

6.已经创建好的表里的字段的编码是否为UTF-8

解决方案:查看出错的表的设计,然后点击指定的字段进行修改

MySQL插入中文乱码问题

 

PS:这里有个值得注意的问题,修改好数据库,表的编码以后,已经创建好的表的字段的编码,并不会改变,需要重新去创建

或者去修改出错的字段的编码,然后问题就迎刃而解了,如果项目不复杂,推荐重新建表,避免每个字段都需要修改。

 

 

上述的分析过程有一个遗漏的地方,就是MySQL的配置文件,my.ini,不知道这个会不会对乱码产生影响,如果上述过程走完,还是乱码,可以把这个也设置一个默认编码为UTF-8.