MySQL字符集不同表关联索引失效

UTF8mb4字符集的表mb4与UTF8字符集的表utf8 关联会产生索引失效的问题。UTF8mb4 是UTF8的超集,遵循小转大的规则,即将UTF8 字符转换成UTF8mb4。

例如 mb4和utf8表都包含索引字段name,做表关联有两种情况。

  1. 大关联小,小索引失效
    以mb4表为基准表,left join utf8,utf8表name字段索引失效。
select * from mb4 t1 left join utf8 t2 on  t1.name = t2.name where t1.name = 'aaaa';

原因:关联时遵循小转大规则,t2.name 字段被转换成utf8mb4字符集,但是表中的name索引字段仍是utf8, utf8mb4!=utf8,导致索引失效。

2.以utf8表为基准表,left join mb4,mb4表name字段索引有效

select * from utf8 t2left join mb4 t1 on  t1.name = t2.name where t2.name = 'aaaa';

原因:关联时遵循小转大规则,t2.name 字段被转换成utf8mb4字符集,此时t1表中的name索引字段仍是utf8mb4,与表字段相符,索引有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值