Cause: java.sql.SQLException: Illegal mix of collations for operation 'like'

最近两天写代码一直出Cause: java.sql.SQLException: Illegal mix of collations for operation 'like' 问题。再网上查了很多资料有说版本问题的,有说编办问题的,有说字符和date不能自查的,后面发现我的bug都不是上面的问题造成,其实一个很小的问题的导致的,但是却明白了一些问题出现的原因。
现在将怎么解决bug。

语句

 m.create_time  like  CONCAT("%",#{date},"%")//报的语句
 
/**Mapper接口*/
List<MerchantDetail> selectMerchantDetailByDate(@Param(value = "province") String province,
												@Param(value = "date") String date);

/**service方法实现方法,正确传参顺序*/
List<MerchantDetail>  merchantDetail=merchantMapper.selectMerchantDetailByDate(province,date);

出现bug的原因

参数没有对应正确,错误传参

//正确传参数顺序(province,date),错误传参顺序(date,province)
List<MerchantDetail>  merchantDetail=merchantMapper.selectMerchantDetailByDate(date,province);

导致的问题

出现Cause: java.sql.SQLException: Illegal mix of collations for operation 'like'报错。是因为date类型和汉字不能转换。

解决办法

1.首先检查sql语句,以为是自己的sql写错了,最后打印出sql语句发现没有错误。
2.再like关键字后面加上binary关键字,将其都转换二进制编码,不报错但是没有数据结果集(不出结果很正常,因为时间不可能和汉字匹配,这只是为了引出后面的重点)

引申问题

出现Cause: java.sql.SQLException: Illegal mix of collations for operation 'like'的情况有编码格式不统一(只要针对中文汉字),数据库版问题,因此我们可能在关键字like后添加关键字binary

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值