中文存入数据库乱码

问题描述

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,306评论 19 139
  • MySQL数据库对象与应用 2.1-MySQL数据类型 库建立好之后基本不动,和我们接触最频繁的是表. 建表就是声...
    极客圈阅读 6,457评论 0 8
  • 1.MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。My...
    黄花菜已凉阅读 10,009评论 3 60
  • 文/稀音 一晚月色正好,某人凝视着我的眼睛,一脸认真的对我说:“圣经里讲,女人是男人身上的一根肋骨变成的,所以每个...
    稀音阅读 4,138评论 15 9
  • 当看到这个标题的时候,脑海里立刻浮现出前段时间在新闻里看到的这样一个故事:有一位27岁的新手妈妈,白天在家带孩...
    power女神阅读 1,267评论 0 1