Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复

写在前面的话

在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录。本文就是写一下发现问题的过程及解决方法。此bug在第一个项目中点这里还存在,修改后的maven项目中点这里此问题已经修复。 

问题定位过程

打开项目地址,进入书籍信息管理
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复

初始化的时候,回传的结果是所有数据进行分页后的信息记录,这里可以看到书名为中文的记录,但是通过搜索栏的标题栏进行搜索的时候,问题出现了,如下:
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复

没有返回数据!
一开始我是没有注意到这是个bug的,因为刚开始整合,很多页面的js都有些错误还没改,所以我感觉可能是js出了问题,就重新看了一下本页面的js方法没有错误。然后就试着用英文和数字进行搜索,得到如下结果:
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
都有结果返回,又尝试着用其他中文参数进行查询,依然没有数据返回。打开控制台查看后端返回的结果,如图: 
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
后端没有报错,只是返回了空数据。到了这一步,已经可以清楚问题出在哪里了,就是中文乱码问题,导致传入数据库的参数不正确,因此无法查出数据。
那么中文乱码是出现在哪个步骤里呢?因此又开始继续定位问题,首先是查看http请求,是否在请求时就已经出现中文乱码的问题,打开控制台,得到如下结果:
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
请求头中的title字段依然为中文字段,并没有乱码。那么中文乱码就不是在前端出现的,可能是数据库编码或者后端代码出现了错误导致这个问题。
登录数据库查询数据库编码,如图: 
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
切换到当前数据库,查询数据库的编码格式,结果为utf8,数据库编码格式也是正常的,通过数据库管理工具执行如下sql也是可以查询到结果的:
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
所以问题就一定出现在代码或配置中,导致程序通过jdbc与mysql间的查询出现中文乱码。
查询程序输出日志,如图: 
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
整理后:
Spring+SpringMVC+MyBatis+easyUI整合基础篇八mysql中文查询bug修复
通过跟踪程序日志发现传入的中文参数一直到dao层都没有乱码,但是查询的结果却出现了差错,问题就是jdbc连接了。
详细解释可以参照前文《Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数》
处理过程总结:发现查询bug,定位问题,是否为前端js错误?是否为http请求时已经中文乱码?是否为后端http返回报错?是否为数据库编码错误?是否为程序传参乱码?是否为jdbc连接错误?通过这一系列问题的提出与验证,最终定位到问题并解决。看到这一过程,步骤挺多的,可能有人会说,不就是一个中文乱码问题吗,至于啰啰嗦嗦讲一大堆吗?我呢,只是记录一下bug修复的过程,及过程中遇到的小麻烦,这些都需要一一去落实的,不然怎么知道是不是js的错?是不是http请求传参时就已经乱码?是不是数据库编码格式真的不是utf8......
虽然步骤有些多但是有些问题其实只需要简单的验证即可知道结果,重要的是细心和耐心,发现了问题就要解决,要去解决就不能怕麻烦,也不能怕找不到问题,无非是你的决心和方法,而且碰到的多了,自然而然定位问题就会快很多,共勉。

结果

通过jdbc与mysql数据库建立连接时,如果数据库的编码格式为utf8,那连接的URL也应该为UTF-8的形式传递参数到数据库才不会出现乱码,为了减少乱码,建议数据库的连接和传递的参数的编码一致,详细如下:
jdbc:mysql://localhost:3306/ssm_demo_db?useUnicode=true&characterEncoding=UTF-8   
tip:最近开发任务慢慢增多,暂时就不更新了。
更多相关文章
  • SSM三大框架整合详细教程Spring+SpringMVC+MyBatis(转)
      使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录 SSM 整合的过程, 这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更 ...
  • 使用spring,springmvc,mybatis,maven搭建后台restful风格的服务 简单说明springmvc 使用注解进行httpurl 方法定位 参数匹配  接收参数和返回参数格式都为json 简单实现PUT POST GET DELETE 请求. git地址:使用spring,s ...
  • 基于Spring+SpringMVC+Mybatis高性能web构建
    一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道 ...
  • SpringMVC+Mybatis框架整合源码项目
    . 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置21. 及时聊天:打开聊天窗口,可群聊.一对一聊天------------------------------------------------------------------------------------- ...
  • Spring+SpringMVC+MyBatis框架搭建
    </load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC< ...
  • 文章已被移至:http://my.oschina.net/xuwang1993/blog/647297
  • java框架整合Springmvc+mybatis+shiro+bootstrap
    . 站内信:收信箱和发信箱, websocket技术通讯技术做的及时收信提醒,可配置语音提示来信 20. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置21. 及时聊天:打开聊天窗口,可群聊.一对一聊天---------------------------------- ...
  • Spring MVC 注释 + iBATIS 整合
    MVC 是当前最主流的框架之一.收到广大开发者的热烈追捧.我也是受影响的人之一.因此,决定在新的项目中,使用 Spring MVC + mybatis 进行处理框架搭建.相对以前比较欢迎的SSI来说,缺少了struts2 的使用,自从上次struts的bug事件,导致现在我对struts还心有余悸. ...
一周排行