Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办_java

项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空。

由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码。

try {
realName = new String(realName.getBytes("GBK"), "UTF-8");
} catch (UnsupportedEncodingException exception) {
logger.error("realName在进行UTF-8编码时出错," + exception.toString());
}

Mybatis动态SQL映射,具体的SQL如下:

首先使用模糊查询检索英文。启动项目,输入英文“test”,按照英文内容检索得到的结果如下图:

我们可以看到SQL正常执行,使用“test”总共检索出2条结果,数据库中对应字段的内容分别是张三test02和张三test,正常来说,如果我们输入中文“张”也可以查询到这两条数据,下面试试使用模糊查询检索中文。启动项目,输入中文“张”,检索得到结果如下图:

我们可以看到这里检索出的结果是0条记录,并且条件的中文内容没有乱码,和预想中的并不一样。复制同样的SQL语句到SQLyog中执行是可以正常检索出结果的。

在使用SQLServer时并没有出现过这样的问题,这次使用MySQL才出现这种情况,怀疑是在Mybatis配置数据源environment时SQLServer和MySQL配置的内容有差异,仔细对比并上网查阅相关内容后发现,MySQL在进行中文检索时,需要在jdbcURL后增加参数useUnicode=true&characterEncoding=UTF-8来指定编码格式。

完整的URL:

jdbc:mysql://127.0.0.1:3306/fanyl_web?useUnicode=true&characterEncoding=UTF-8

在修改了MySQL的jdbcURL后,启动项目,继续输入中文“张”,检索得到结果如下:

总共检索出3条结果,至此Mybatis使用MySQL进行模糊查询时输入中文检索不到结果的问题就解决了。

另外再附上MySQL的jdbcURL中常见的几个参数说明:

以上所述是小编给大家介绍的Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mybatis模糊查询
mybatis mysql 模糊、mysql 模糊检索、mybatis 全文检索、mybatis 模糊查询、mybatis模糊查询语句,以便于您获取更多的相关知识。

时间: 2016-07-08

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办_java的相关文章

服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到

问题描述 hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到 用hibernate做模糊查询,页面传递参数也处理了乱码 @Action(value="searchNameByad") public String searchNameByad()throws Exception{ System.out.println("android发送请求获取的参数是:"+buildingname); //解决乱码问题 String bn = new Str

bug-QT实现模糊查询时出现的BUG

问题描述 QT实现模糊查询时出现的BUG 小弟使用的数据库时sqlite, 解决方案 上代码://学生查询课程模块 student_chack_course::student_chack_course(QWidget *parent) :QDialog(parent) { LineEdit_1=new QLineEdit; Label_1=new QLabel(tr("请输入关键字:")); Label_1->setBuddy(LineEdit_1); button_1=new

mysql模糊查询like/REGEXP

原文:mysql模糊查询like/REGEXP 增删改查是mysql最基本的功能,而其中查是最频繁的操作,模糊查找是查询中非常常见的操作,于是模糊查找成了必修课. like模式 like意思是长得像,有两个模式:_和% _表示单个字符,通常用来查询定长的数据,如查出所有姓王的三个字的人名,假设姓名列名为name,注意"王"后面有两个_ select name from 表名 where name like '王__'; %表示0个或多个任意字符,如查出所有姓王的人名 select na

mybatis-SpringMVC+Spring+Mybatis+DWZ(模糊查询)

问题描述 SpringMVC+Spring+Mybatis+DWZ(模糊查询) Mybatis里面: select from AUS_USERS where 1 = 1 and AUS_CARDCODE LIKE CONCAT(CONCAT('%','#{ausCardcode}','%')) <if test="ausUsername != null"> and AUS_CARDCODE LIKE CONCAT(CONCAT('%','#{ausUsername}','%

mysql模糊查询like和regexp小结_Mysql

在mysql中实现模糊查询的有like和regexp. ------------------------ like的用法许多人都是知道的,最为常用的情况就是select * from a where name like '%a%'; 其中'%'代表的是任意个字符,它的效果像是正则表达式里的'*',它有几种用法:'a%','%a%','%a',分别表示以什么开头,存在什么以及以什么结尾. 另外也可以使用'_'字符,这表示一个任意字符.效果类似正则表达式里面的'.'. like是对这个字段里面的所有

mysql模糊查询

mysql模糊查询 双引号中出现的变量将自动被解析. $sql = "SELECT * FROM oneself WHERE name like '%{$colname_Recordset1}' LIMIT {$startRow_Recordset1}, {$maxRows_Recordset1}"; $Recordset1 = mysql_qu 双引号中出现的变量将自动被解析. $sql = "SELECT * FROM oneself WHERE name like '%

hibernate模糊查询条件是中文 但是不能返回值

问题描述 小弟请教一下:我用的hibernate模糊查询页面的数据是utf-8,数据库也是模糊查询的条件是中文他就是返回为空但是是数字他又正确了我保证hql语句正确的用的是SSHspring我配置了characterEncoding=UTF-8请大家赐教 解决方案 解决方案二:你首先要看看不的数据库的中文是否是乱码,是的话那就不能查询出来,数字又正确,说明你的查询语句没错,仔细看下解决方案三:数据库不是乱码,数据是正确的查询语句如下:fromDepartmentdmwheredm.departm

mysql 模糊查询

mysql> SELECT * FROM pet WHERE name LIKE "b%"; 为了找出以"fy"结尾的名字: mysql> SELECT * FROM pet WHERE name LIKE "%fy"; 为了找出包含一个"w"的名字: mysql> SELECT * FROM pet WHERE name LIKE "%w%"; 为了找出包含正好5个字符的名字,使用&qu

浅谈MySQL模糊查询中通配符的转义_Mysql

sql中经常用like进行模糊查询,而模糊查询就要用到百分号"%",下划线"_"这些通配符,其中"%"匹配任意多个字符,"_"匹配单个字符.如果我们想要模糊查询带有通配符的字符串,如"60%","user_name",就需要对通配符进行转义,有两种方式.如下:   1.反斜杠是转义符,通过反斜杠来转义%,使其不再是通配符.这里第一个%是通配符,第二个%不是通配符. select perc