在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;