错误描述: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 <= date_add(CURTIME(), interval 5 minute)
好像没什么问题,复制代码到navicat执行一下,看到执行结果如下:
初步理解为数据设置字段smcb.pretime的存储字符集和mysql函数date_add处理的结果字符集不一致引起的,原因找到了,解决方法就很简单了。第一印象就是mysql的concat函数拼接一下,原理感觉有点类似于java中的int类型和String类型的拼接改变返回结果的类型。
将代码改成
AND smcb.pretime <= CONCAT(date_add(CURTIME(), interval 5 minute),"")
再执行一下sql语句,数据正常,根本原因还是字符集的不一致导致的。