写在前面的话

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

问题定位过程

 
打开项目地址,进入书籍信息管理
 
 
 
初始化的时候,回传的结果是所有数据进行分页后的信息记录,这里可以看到书名为中文的记录,但是通过搜索栏的标题栏进行搜索的时候,问题出现了,如下:
 
 
 
没有返回数据!
一开始我是没有注意到这是个bug的,因为刚开始整合,很多页面的js都有些错误还没改,所以我感觉可能是js出了问题,就重新看了一下本页面的js方法,没有错误。然后就试着用英文和数字进行搜索,得到如下结果:
 
 
都有结果返回,又尝试着用其他中文参数进行查询,依然没有数据返回。打开控制台查看后端返回的结果,如图: 
 
 
后端没有报错,只是返回了空数据。到了这一步,已经可以清楚问题出在哪里了,就是中文乱码问题,导致传入数据库的参数不正确,因此无法查出数据。
那么中文乱码是出现在哪个步骤里呢?因此又开始继续定位问题,首先是查看http请求,是否在请求时就已经出现中文乱码的问题,打开控制台,得到如下结果:
 
 
请求头中的title字段依然为中文字段,并没有乱码。那么中文乱码就不是在前端出现的,可能是数据库编码或者后端代码出现了错误导致这个问题。
登录数据库查询数据库编码,如图: 
 
 
切换到当前数据库,查询数据库的编码格式,结果为utf8,数据库编码格式也是正常的,通过数据库管理工具执行如下sql也是可以查询到结果的:
 
 
所以问题就一定出现在代码或配置中,导致程序通过jdbc与mysql间的查询出现中文乱码。
查询程序输出日志,如图: 
 
 
整理后:
 
 
通过跟踪程序日志发现传入的中文参数一直到dao层都没有乱码,但是查询的结果却出现了差错,问题就是jdbc连接了。
 
 
  处理过程总结:发现查询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:最近开发任务慢慢增多,暂时就不更新了。

Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复的更多相关文章

  1. Spring+SpringMVC+MyBatis+easyUI整合基础篇

    基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...

  2. Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM

    写在前面的话   承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...

  3. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶

    日常啰嗦 上一篇文章<Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建>简单的讲了一下SVN服务器的搭建,并没有详细的介绍配置文件及一些复杂的功能, ...

  4. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结

    不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介

    很久之前就打算开始写一下自己的技术博客了,实在抽不出时间所以计划一直搁置了,最近项目进度渐渐缓了下来,不那么忙了,也因此开始筹备自己的博客.说到这次博客的主角,也是无心插柳找到的,来源于两年前自己写的 ...

  7. Spring+SpringMVC+MyBatis+easyUI整合基础篇(三)搭建步骤

    框架介绍: 主角即Spring.SpringMVC.MyBatis.easyUI,大家应该也都有所了解,概念性的东西就不写了,有万能的百度.   工作环境:       jdk 1.7       m ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试

    承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:1 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(九)版本控制

    日常啰嗦 还好在第一篇文章里就列好了接下来的主线及要写的知识点,不然都不知道要写什么东西了,开篇里已经列了基础篇要讲svn和git的知识点,所以这一篇就写一下版本控制. 项目实际效果展示在这里,账密: ...

随机推荐

  1. vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题

    npm run dev命令后并不会在dist目录下生成build.js文件,开发环境下build.js是在运行内存中的. 在package.json的scripts属性的dev后面加上--port 8 ...

  2. Linux 系统分区

    合理的系统分区,便于后期管理和提高文件的搜索速度 分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四 个,SCSI,SA ...

  3. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  4. SQL 日期筛选的两种方式

    主要解决的是后一天的问题~容易漏掉最后一天~第一种方法,拼接String,第二种方法直接在最后一天加一天 第一: <if test="beginDate != null and beg ...

  5. 负载均衡软件LVS分析四(测试)

    一.启动LVS集群服务LVS负载均衡管理和使用有两种方式,一种是以ipvsadm命令行脚步与ldirectord监控方式,一种是以Piranha工具进行管理和使用.下面分别介绍. 1.利用ipvsad ...

  6. Android开发系列之Context

    相信大家对于Context应该非常熟悉,但是Context到底是什么意思呢?到底指的是什么东西呢?我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程.Android系统的上下文对象,即 ...

  7. CAReplicatorLayer复制Layer和动画, 实现神奇的效果

    今天我们看下CAReplicatorLayer, 官方的解释是一个高效处理复制图层的中间层.他能复制图层的所有属性,包括动画. 一样我们先看下头文件 @interface CAReplicatorLa ...

  8. css3 小图标提示特效

    最近的计划,就是每天来几个特效,当然这里有限制,在什么候选区只能放一个,还每天有限制发布的,哎, 啊 终于写完了,看到一个挺好玩的东西,想到能不能用网页的特效做出来,试试呗!不过,一想肯东有很多的 相 ...

  9. Oracle基础学习(二)v$session中Command的数字含义

    v$session中Command的数字含义. 1 CREATE TABLE 2 INSERT 3 SELECT 4 CREATE CLUSTER 5 ALTER CLUSTER 6 UPDATE 7 ...

  10. 简单js

    js是一门弱类型的语言,要是你学过c/c++,那么上手js是一件简单的事情. js的变量是通过 var 来声明的.例如:声明一个变量 num 是这样的: var num; 我们也可以直接用 num , ...