mysql - 解决mysql中的 "Illegal mix of collations"错误

标签 mysql collation

尝试通过 MySQL 中的存储过程进行选择时出现以下错误。

Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='

知道这里可能出了什么问题吗?

表的排序规则为 latin1_general_ci,where 子句中列的排序规则为 latin1_general_cs

最佳答案

这通常是由于比较两个排序规则不兼容的字符串或尝试将不同排序规则的数据选择到组合列中而导致的。

子句COLLATE 允许您指定查询中使用的排序规则。

例如,以下 WHERE 子句将始终给出您发布的错误:

WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_cs

您的解决方案是为查询中的两列指定共享排序规则。以下是使用 COLLATE 子句的示例:

SELECT * FROM table ORDER BY key COLLATE latin1_general_ci;

另一种选择是使用BINARY运算符:

BINARY str is the shorthand for CAST(str AS BINARY).

您的解决方案可能如下所示:

SELECT * FROM table WHERE BINARY a = BINARY b;

或者,

SELECT * FROM table ORDER BY BINARY a;

请记住,正如 Jacob Stamm 在评论中指出的那样,“转换列来比较它们将导致该列上的任何索引被忽略”。

有关此整理业务的更多详细信息,我强烈推荐 eggyal's excellent answer to this same question .

关于mysql - 解决mysql中的 "Illegal mix of collations"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001974/

相关文章:

mysql - 匹配日期的最后一个实例的 SQL 查询

php 调用 mysql 过程未检索结果

mysql - Web API 没有得到正确的结果

mysql多重排序

php - Laravel - 表不存在

sql-server - sql server 排序规则是否意味着列名必须大小写正确?以及如何处理这个问题

MySQL 排序规则 : utf8mb4_unicode_ci vs "utf8mb4 - default collation"

php - MYSQL:为查询选择了不正确的排序规则

mysql - 将 Mysql latin1_swedish_ci 转换为 utf8_bin

MySql 从另一个表中减去一个表