生产环境的sql出现:Illegal mix of collations for operation UNION

本文详细记录了一次线上环境中遇到的MySQL UNION操作因字段编码不一致导致的问题排查及解决方案。通过逐步删减查询字段定位问题,最终发现生产环境字段编码不一致,将编码统一为unicode解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早晨刚来上班没多久,突然收到测试童鞋发过来生产环境的一个报错。

Illegal mix of collations for operation 'UNION'。

什么鬼情况,怎么刚上线就出问题了

我让测试童鞋重现了一下,我监视着服务器的日志。

我去。还真的有。接下来就开始茫茫找问题路。

——————————————————————————————————————————————————

找问题:

1.首先网上搜索了下,说是union关联sql里字段编码问题不一致。因为测试环境没有这个问题,我首先定位于数据问题。

  挨个删减查询字段,最后定位到一个字段上,语句是这么写的,snStartDest.一个拼接类型的字段:

SELECT
    id,
    CONCAT( route_starts, route_dests ) AS snStartDest 
FROM  A
UNION  (
    SELECT
        user_id AS id,
        '' AS snStartDest 
   FROM B

)

2.在concat里,我单独一个字段都是ok的(CONCAT( route_starts)CONCAT( route_dest)),只是两个字段concat一起是不行的(CONCAT( route_starts, route_dests ))。此时证明已不是数据问题,想起来搜查网上的字段编码问题,决定看下是不是生产环境字段编码确实有问题。

3.生产环境俩个字段果然不一致,再看了下测试环境是一致的。找到运维童鞋,运维也很蒙圈,什么时候俩字段变了。

  最后在线上环境都改成unicode编码,解决。测试环境编码一直一致。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值