问题描述
在前端输入一段中文存入mysql中,发现mysql中的显示是??
矛盾点
在前端发请求的时候设置了字符编码为utf-8(utf8:用以解决国际上不同语言而出现的编码),但为什么数据库中却接受不到中文。。。
问题解决
Q1:首先判断下问题可能在哪?
我们在向mysql 写入中文数据时,在客户端(前端,后端的java程序)、数据库连接、写入数据库时分别要进行编码转换;写入数据库后,在返回结果、数据库连接、客户端((前端,后端的java程序))分别进行编码转换。从问题的描述中我们知道问题在写入数据库的过程中。。。
Q2: 虽然在发请求的时候设置了字符编码为utf-8,但还是不放心,怀疑问题可能会出在前端。
A2: 用postman进行了测试,发送post请求,传入的数据为中文,去数据库查看,发现还是???
,虽然这不能说明前端是没有问题的,但证明了后端一定有问题。
Q3: 是SpringBoot 的问题吗?
A3: 在网上尝试了很多办法,试图将SpringBoot 的字符编码设置为utf-8,后来发现SpringBoot 的默认编码方式就是utf-8.....
Q4:那么问题在哪里?
A4: 现在需要排查数据库了。使用show variables like 'character_set_%'
来查看数据库的编码格式。
设置下数据库连接时的字符编码,怎么设置?不知道.....google 搜索,在jdbc 连接mysql的时候设置,在springBoot 中application.properties中添加如下代码:
spring.datasource.url=jdbc:mysql://localhost:13308/GrowthNoteList?useUnicode=true&characterEncoding=utf-8
设置后用上述命令查询如下:
上述结果显示的是mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询结果、服务器、系统的字符集设置及mysql的字符设置目录。
在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关,乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关。(注:客户端是看访问mysql 数据库的方式,通过命令行访问,命令行窗口就是客户端,通过JDBC 等连接访问,程序就是客户端。)
再次用postman测试,发现可以存入中文了,问题解决。
结论:jdbc连接数据库的时候字符编码需要设置成utf-8
反思
开始的时候没有想到数据库,主管怀疑是springBoot,就从网上找设置SpringBoot字符编码的方式,然后各种尝试,浪费了很多时间。。。
action
当陷入问题,一时解决不了时用tasking图帮助理清思路,找出可能出现问题的点,不能陷入问题,在google上盲目的搜索,会浪费很多时间的。