问题解决:myslq数据库用union all查询出现 #1271 - Illegal mix of collations for operation ‘UNION‘

报错内容:
在执行一个使用UNION ALL的SQL时会出现
在这里插入图片描述

先说解决方案(两种)

  1. 找到出UNION ALL关联的所有表字段“字符集排序编码(COLLATE)”
# 查看字符集字符集排序编码
show full columns from Cust_ECard;
show full columns from IC_UserCard;

执行结果
在这里插入图片描述

  1. 查看那些字段“字符集排序编码”与其他的字段不同
    很明显可以看到有一张表的这个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语句就不会报错
如果还报错同样的错误,那就检查一下是否有字段漏掉了,同时是否有字段是取得从表数据,把从表字符集排序检查一遍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值