美文网首页
中文存入数据库乱码

中文存入数据库乱码

作者: 星期六1111 | 来源:发表于2017-09-27 22:21 被阅读170次

    问题描述

    在前端输入一段中文存入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上盲目的搜索,会浪费很多时间的。

    相关文章

      网友评论

          本文标题:中文存入数据库乱码

          本文链接:https://www.haomeiwen.com/subject/kilpextx.html