mysql里乱码 dao里正常_mysql数据库中文乱码问题

问题

感谢学妹帮忙找到的bug——在服务器端的搜索功能无法使用。 而问题的难点在于,这个功能我在localhost测试确实正常的。

202ee32ea20d6a15a2e93f92e0f0364c.png

这里能看到数据请求发送是成功的,而localhost可以把正确的结果放到data里,而服务器端不行,显然应该是DAO层出现了问题,这锅首先肯定是给我这个后台背稳了。

各种猜测和测试而不得,最终在远程debug才发现问题所在——数据库的字符集问题

解决问题

远程debug

远程用idea在服务器上的tomcat去debug的过程不多描述,在 之前的博客 里就已经写过了,debug的话需要在catalina的java_opt里加个参数,参数在idea中tomcat配置那块会给出的,具体的就不多说。

发现根源

既然是DAO层,那么就具体一行一行的跑跑看。 前端传过来的city正确获取到了,嗯就是“武汉”,字符串也没问题。

6becf99a5025c0471f71818ac29a3abc.png 那看看PrepareStatement最后结果咋样。

ea45cd894482f2ec379ec6bd8d669fec.png 嗯??什么鬼????乱码了?? 那问题应该就出在这里了 再用idea的console跑跑sql命令

792ef78a27be6226131d861294098926.png 可以正常得到结果,行,那就是这里setString没有正确执行的问题了。去网上找找资料咯。

解决

回头看看服务器上数据库的编码和本地数据库的编码,果然有些不是utf-8

98403fa07fd6d4aa62591e2b2f78f97a.png

那现在剩下的问题就是改成utf-8了!1sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在这个配置文件里找到[mysqld],然后加如下列字段,ojbk!1

2[mysqld]

default-character-set=utf8

然后重启mysql1sudo service mysql restart

嗯??无法重启是怎么回事?! 原因是当前这个数据库建立的时候是以默认character也就是latinl建立的,这个时候说改默认就改默认,那我们数据库岂不是很没面子?

所以只能备份数据库(导出数据库的语句)+然后从删库到跑路了

删掉了这个数据库,就能正常重启mysql了。随后再添加数据库,还原数据。

最后再截一张搜索成功的图

20aafa57d6217658d0efcf2bfed8d63c.png

总结

没啥好总结的,主要是多查资料很关键,感谢各位前辈们在网上的无私奉献。 和数据库字符编码原理相关的干货: 深入Mysql字符集设置

ps:北二的三鲜拌面原来是没有蘑菇的,好吃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值