一、错误说明
基于mysql的两个字符集不一样的数据库(一个是utf8mb4_general_ci,另一个是utf8mb4_0900_ai_ci),通过left join跨库关联表的中文字段查询时,因中文字符集不一致,直接报“[Err] 1267 - Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='”错误异常提示。
二、解决方法
通过mysql的collate关键词进行字符集转义解决问题,具体sql示例说明如下
原报错SQL如下
select cc.class_no,cc.class_name,ss.sex,ss.stu_age from db1.sch_class cc left join db2.sch_student ss @b@ on cc.class_name=ss.cla_name
修改后SQL如下(最后加了collate utf8mb4_general_ci - 根据具体字符集进行转换)
select cc.class_no,cc.class_name,ss.sex,ss.stu_age from db1.sch_class cc left join db2.sch_student ss @b@ on cc.class_name=ss.cla_name collate utf8mb4_general_ci