📌  相关文章
📜  mysql 非法混合排序规则以进行操作'join' - SQL (1)

📅  最后修改于: 2023-12-03 14:44:30.929000             🧑  作者: Mango

MySQL 非法混合排序规则以进行操作'join' - SQL

在使用 MySQL 进行 join 操作时可能会遇到 "Illegal mix of collations" 的错误提示,这是由于表中的字符集不一致导致的。本文将介绍原因及解决方法。

原因

在 MySQL 中,每个表都有一个字符集以及一个排序规则(collation)。当两个表通过 join 进行关联时,如果它们的字符集或排序规则不一致,就会出现 "Illegal mix of collations" 的错误提示。

例如,假设表 A 的字符集为 utf8mb4_general_ci,而表 B 的字符集为 utf8mb4_bin,当对它们进行 join 操作时就会出现上述错误。

解决方法
方法一:修改表的字符集和排序规则

一种解决方法是修改表的字符集和排序规则,使它们一致。可以使用 ALTER TABLE 语句修改表的字符集和排序规则,例如:

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

这个语句将修改 tablename 表的字符集为 utf8mb4,并将排序规则设置为 utf8mb4_general_ci。如果需要修改另一个表,只需要将 tablename 替换成表名即可。

方法二:使用 COLLATE 语句比较

另一种解决方法是使用 COLLATE 语句比较字符,例如:

SELECT *
FROM table1
JOIN table2
ON table1.column_name COLLATE utf8mb4_general_ci = table2.column_name COLLATE utf8mb4_general_ci;

这个语句将对 table1 和 table2 表中的 column_name 列进行比较,在比较时将使用 utf8mb4_general_ci 排序规则。

总结一下,如果在使用 MySQL 进行 join 操作时遇到 "Illegal mix of collations" 的错误提示,可以通过修改表的字符集和排序规则或使用 COLLATE 语句比较来解决问题。