Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '

错误描述:Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '<='

          简单来看就是操作的左边和右边的字符集不同,看了下数据库、表、字段的存储,都是utf8_general_ci,排除是数据库的存储问题,然后来看代码,截取其中一部分

AND smcb.pretime &lt;= date_add(CURTIME(), interval 5 minute)

   好像没什么问题,复制代码到navicat执行一下,看到执行结果如下:

       初步理解为数据设置字段smcb.pretime的存储字符集和mysql函数date_add处理的结果字符集不一致引起的,原因找到了,解决方法就很简单了。第一印象就是mysql的concat函数拼接一下,原理感觉有点类似于java中的int类型和String类型的拼接改变返回结果的类型。

将代码改成

   

 AND smcb.pretime &lt;= CONCAT(date_add(CURTIME(), interval 5 minute),"")

         再执行一下sql语句,数据正常,根本原因还是字符集的不一致导致的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值