记一次mysql数据库字符集引起的前端返回空值的问题

新项目导入,好不容易跑通了项目,美滋滋的开始研发之旅。可没想到,才一开始就折戟成沙。。。

问题发现

问题起源于一个简单的数据库查询。本地项目跑起来之后,初始列表能正常显示到前端列表中。问题来了,当我输入中文查询条件时,竟然 查询结果为空。马上跑去数据库看,数据肯定真是存在的。而且在默认显示的列表中还能正常显示出来。

问题处理

首先分析:既然能正常显示,那就应该是这个查询逻辑存在问题。于是开始查找该查询功能的流程及源码。

查到最后无功而反。因为找到最底层,发现是之前的原发人员封装并打包成了jar,并且目前线上该功能是能够正常运行的。

既然代码没有问题,那肯定就只能是数据的问题了,而能够引起数据问题的,首先想到的就是编码。恰好这个查询条件又是中文。于是翻遍项目,找到一个新建插入数据的地方,赶紧插入一条数据。果不其然,重新查询出来,之前插入的所有中文数据都变成了“?????”。

问题确认:字符编码问题。传入数据库的字符编码 和 数据库本身的编码不同。

马上对比线上(第一张)、线下(第二张) 数据库字符集区别:



问题清晰,是不是认为这就简单了,改下字符编码就好了嘛???(你要是这样想,你就太年轻了)

编码修改方式一:通过cmd客户端修改

刚好不久之前看过一个视频,专门讲解,mysql变量的。说是通过以下代码可以修改全局变量。

set global 变量名 = 值;

不知道是不是我操作原因,反正最终并未解决问题。

编码修改方式二:直接修改配置文件

常识!常识!!常识!!!(知识点啊)

要修改配置文件,前提是你的先找到它在哪啊???就是因为不懂常识,找了好了。

一开始我已以为在mysql的安装目录下,结果我跑去找,没有。

于是就开始在网上各种百度。几乎所有人和我想的都一样。最后终于一个回复中找到答案:安装目录下面没有的话,可以尝试去

“C:\ProgramData\MySQL\MySQL Server 5.7”这里看看。结果跑去一看压根就没有“ProgramData”这个目录。这个目录是个隐藏目录。最终终于在这里找到了配置文件my.ini。

修改配置文件如下,新增以下代码,如果已经存在更改值即可。改完保存,重启mysql服务。




至此,问题解决。正常插入,查询 都正常了。又可以愉快的开发了。

写在最后:现在回过来想,这也不是一个很难的问题,最终改了几行代码就完美解决。遇到问题没什么,关键是要慢慢分析,理清楚因果。最后总能解决的。

猜你喜欢

转载自blog.csdn.net/pjz161026/article/details/80929370