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语句,数据正常,根本原因还是字符集的不一致导致的。

猜你喜欢

转载自blog.csdn.net/qq_29410905/article/details/82054140