最近两天写代码一直出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
。