内容纲要
概要描述
本文主要介绍执行 kundb sql 报错Illegal mix of collations (utf8mb4_cs_0900_ai_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='
的排查思路和解决办法。
详细说明
创建样例表
drop table if exists table1;
CREATE TABLE table1 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_cs_0900_ai_ci NOT NULL,
age INT
);
drop table if exists table2;
CREATE TABLE table2 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
age INT
);
执行join操作
SELECT table1.name, table2.name
FROM table1
JOIN table2 ON table1.name = table2.name;
这个错误是因为你试图连接的两张表或者其中的列使用的字符集(collation)不匹配。在MySQL中,字符集和排序规则是相关的。比如,utf8mb4是字符集,而utf8mb4_general_ci和utf8mb4_cs_0900_ai_ci是utf8mb4的两种不同的排序规则。
解决方案
方案一:在JOIN操作中使用COLLATE来明确指定相同的排序规则:
SELECT table1.name, table2.name
FROM table1
JOIN table2 ON table1.name COLLATE utf8mb4_general_ci = table2.name COLLATE utf8mb4_general_ci;
方案二:更改其中一个表的字符集或排序规则,使其与另一个表匹配。
例如,你可以将 table2 的 name 列的排序规则更改为 utf8mb4_cs_0900_ai_ci:
ALTER TABLE table1 MODIFY name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
FAQ:
可以通过 show full columns from table1
的方式确认列的字符集和排序规则。