报错内容:
在执行一个使用UNION ALL的SQL时会出现
先说解决方案(两种)
- 找到出UNION ALL关联的所有表字段“字符集排序编码(COLLATE)”
# 查看字符集字符集排序编码
show full columns from Cust_ECard;
show full columns from IC_UserCard;
执行结果
- 查看那些字段“字符集排序编码”与其他的字段不同
很明显可以看到有一张表的这个TelNo字段与其他的不同,一般情况下都是用utf8mb4_general_ci
方案一(需要提交脚本,简单快捷)
直接执行脚本:
# 修改字符集排序编码
ALTER TABLE Cust_ECard MODIFY TelNo varchar(20) COLLATE utf8mb4_general_ci;
方案二(需要修改SQL,如果SQL结构及其复杂,建议使用方案一)
把出问题的字段进行转码
注意:每个UNION ALL的表都要转,只转一个是不行的
# 样例
SELECT
U.ID,
CONVERT(U.TelNo USING utf8mb4) TelNo,
FROM User U
UNION ALL
SELECT
U.ID,
CONVERT(U.TelNo USING utf8mb4) TelNo,
FROM User U
再去执行SQL语句就不会报错
如果还报错同样的错误,那就检查一下是否有字段漏掉了,同时是否有字段是取得从表数据,把从表字符集排序检查一遍