Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT)
  eHipUjOuzYYH 2023年11月02日 51 0

一、概述

今天同事突然询问报错
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='

分析:
应该是连表查询,两张表的的匹配列编码格式不一致引起的

二、问题复现

1、创建两张小表
create table test1 (
name varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
);
create table test2 (
name varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci
);

2、插入数据
insert into test1 values ('guanyu'),('zhangfei'),('zhaoyun');
insert into test2 values ('zhangliao'),('dianwei'),('guanyu');

3、复现报错情况
情况一
select t1.name from test1 t1,test2 t2 where t1.name=t2.name;

情况二
select name,(select name from test2 where name = (select name from test1 where name='guanyu')) name2 from test1;

由于两张表对应的name列编码格式不一样,直接报错
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='

三、问题修复

1、查看数据库的默认编码格式
show variables where Variable_name like 'collation%';
此处只是建议,并不一定非要按照默认编码格式

Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT)_ci

2、重置表的编码格式
alter table test1 default character set utf8mb4 collate=utf8mb4_0900_ai_ci;

3、修改表中字段编码格式
ALTER TABLE test1 convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年11月22日   23   0   0 linuxApacheci
  jnZtF7Co41Wg   2023年11月24日   33   0   0 分区表cicentos
  ojFX2cbvFbdn   2023年11月19日   29   0   0 gitrpm包ci
  py5aPqzocVnd   2023年11月22日   39   0   0 协议ci