mybatis查询count返回 <== Row: 0

当服务器上MyBatis执行包含中文的SQL查询时,虽然数据库中有统计数据,但返回结果却显示 Row: 0。问题在于SQL中的中文在代码层转码后,在服务器与数据库交互时出现了编码问题。即使数据库字符集为utf-8,直接在数据库执行SQL正常,通过代码执行则返回空结果。解决方法是在JNDI配置的数据库URL中添加字符转码配置,避免环境引起的编码冲突。
摘要由CSDN通过智能技术生成

首先count的返回为0肯定不是统计结果为0,这里的情况是在服务器做查询,根据打印的sql到数据库去查询count是有统计量的,返回的row是1,就是有统计结果的。但是服务器上打印的sql就显示  <==        Row: 0,这个是因为服务器发送查询sql到数据库去执行过程中有中文,这个中文在你代码层面可能是转码过的,所以在代码层面不会显示乱码,这才是迷惑人的地方,而且如果数据库表的字符集也是utf-8,那如果这个问题说是中文编码问题引起就更让人费解了,将sql直接拷贝到数据库去执行没问题,但是通过代码连数据库去执行sql就返回0行结果集(不是统计结果为0),笔者通过查询资料,做了个修改,解决了这个问题,因为数据库是通过jndi配置,jndi又在tomcat的server.xml集成,所以在jndi那段连数据库url中加入了字符转码的配置,默认是连数据库的url中不需要配置的。没错,一个完整请求过来笔者先在代码层进行了utf-8转码了,现在还在连数据库的层面再转utf-8,这里比较合理的解释就是莫名其妙的环境问题了。具体配置如下:

39 <!--配置MySQL数据库的JNDI数据源-->
40 <Resource 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值