Cause: java.sql.SQLException: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation ‘=’

2020-09-13 | By Jinyang | Filed in: 技术相关.

生产服务器的MySql默认是utf8_general_ci字符集,但是有部分表格的字段是utf8_unicode_ci字符集。

按此前的处理方法,转换下其中一个的字符集即可,参考语句:

ALTER TABLE tablename
CHANGE COLUMN colname colnameVARCHAR(45) CHARACTER SET ‘utf8’ COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT ‘备注

但是这次的2个表 都已经有其他业务逻辑在使用,贸然调整的话 会引发其他业务的异常,于是用上了sql语句中的字符集转换方法 这样对原始存储不做改变 不影响既有业务:

select * from table1 where table1.userid  = CONVERT (table2.openid USING utf8) COLLATE utf8_general_ci  

最好的当然是在业务规划设计时就明确确定好使用utf8_unicode_ci。


Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注