Mybatis使用MySQL进行模糊查询时输入中文检索不到结果

项目开发中,在做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中常见的几个参数说明:

参数名称参数说明
user数据库用户名(用于连接数据库)
password数据库密码(用于连接数据库)
autoReconnect(true/false)当数据库连接异常中断时,是否自动重新连接
maxReconnectsautoReconnect设置为true时,重试连接的次数
initialTimeoutautoReconnect设置为true时,两次重连之间的时间间隔,单位:秒
useUnicode(true/false)是否使用Unicode字体编码
characterEncoding当useUnicode设置为true时,指定字符编码
relaxAutocommit(true/false)是否自动提交
connectTimeout和数据库服务器建立socket连接时的超时,单位:毫秒。
socketTimeoutsocket操作(读写)超时,单位:毫秒。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值