Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation ‘=’ 错误解决办法

问题引发

联合查询现有信息和历史信息的时候突然报这个错,语句是没问题的不出错、这个错大概原因是因为表的字符编码格式不一致引起的,Sql如下:

SELECT * FROM
  (SELECT cw.*, cwl.CWL_ID, CWL_TYPE, CWL_MSG, CWL_DATE, CWL_USER, CWL_GUID,
    (SELECT ccc_name FROM cdc_config cc WHERE cc.`CCC_CODE` = cw.CCC_CODE) cccName,
    (SELECT ct_name  FROM cdc_type WHERE ct_code = cw.`CT_CODE`) CT_NAME, ctvh.CCA_GUID, ctvh.CTC_VALUE 
  FROM
    cdc_ware_hi cw,
    cdc_ware_log_hi cwl,
    cdc_type_val_hi ctvh 
  WHERE cw.cw_guid = cwl.cw_guid 
    AND cw.cw_guid = ctvh.cw_guid 
    AND cw.CW_GUID = '742cda59-c5f8-4352-be18-72cf8cf98648' 
  UNION
  SELECT cw.*, cwl.CWL_ID, CWL_TYPE, CWL_MSG, CWL_DATE, CWL_USER, CWL_GUID,
    (SELECT ccc_name FROM cdc_config cc WHERE cc.`CCC_CODE` = cw.CCC_CODE) cccName,
    (SELECT ct_name  FROM cdc_type  WHERE ct_code = cw.`CT_CODE`) CT_NAME, ctv.CCA_GUID, ctv.CTC_VALUE 
  FROM
    cdc_ware cw,
    cdc_ware_log cwl,
    cdc_type_val ctv 
  WHERE cw.cw_guid = cwl.cw_guid 
    AND cw.cw_guid = ctv.cw_guid 
    AND cw.CW_GUID = '742cda59-c5f8-4352-be18-72cf8cf98648') a 
ORDER BY CWL_DATE DESC ;

问题解决

少量表

现关联表较少、所以很清楚的知道是因为cdc_type_val_hi、cdc_type_val_hi这两表与其他表字符编码不一致,所以改这两个表的字符编码格式就可以了,代码如下:

alter table `cdc_type_val` convert to charset utf8;
alter table `cdc_type_val_hi` convert to charset utf8;

大量表

在很多很多表联合查询的时候,由于表太多,无法快速定位字符编码不一致的表,所以我选择把所有的表都改了(宁可错杀、绝不放过)。操作步骤如下:

1、使用Navicate工具连接到要进行转码的数据库、查询出所有的表
2、复制所有数据表名称到EXCEL中,添加转换编码脚本(alter table `表名` convert to charset utf8;)的前后两列字符串。
3、拷贝所有转码SQL到记事本文件中,替换去掉多余的空格。
4、拷贝记事本中生成的SQL到Navicate工具中新增查询后批量执行SQL就可以啦

版权声明:
作者:黯然gg
链接:https://3zi.cn/archives/226
来源:阿龙爱吃肉
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录