MySQL数据表之间字符集不同连表查询报错

2021-11-22 09:58:10 浏览数 (2)

在MySQL中如果两张表的字符排序集(Collate)不同(比如一张表为utf8mb4_general_ci, 另一张表为utf8mb4_unicode_ci),在连表查询时就可能会如下类似的错误:

代码语言:javascript复制
 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=' ###

可以通过如下语句修改表的字符排序集:

代码语言:javascript复制
ALTER table table_name COLLATE=utf8mb4_general_ci;

不幸的是,即使改了之后还是会报错,原因是,该语句只能修改后续插入的数据,对于已存在的行记录则不会修改,需要再执行如下语句才能修改历史记录:

代码语言:javascript复制
ALTER TABLE table_name convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

两者合并起来就是:

代码语言:javascript复制
ALTER table table_name COLLATE=utf8mb4_general_ci, convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

0 人点赞