kundb join报错Illegal mix of collations

  其他常见问题
内容纲要

概要描述


本文主要介绍执行 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;

file

这个错误是因为你试图连接的两张表或者其中的列使用的字符集(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 的方式确认列的字符集和排序规则。

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。