本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!
Question
在MySQL中通过存储过程执行一个select语句时,遇到了如下的错误:
Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='
这里是什么出了问题呢?
表的排序规则是latin1_general_ci,where语句中的列的排序规则是latin1_general_cs。
Best Answer
这通常是因为比较两个拥有不同排序规则的字符串或试图查询拥有不同排序规则的数据到一个组合列中而导致的。
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;