尝试通过MySQL中的存储过程进行选择时出现以下错误。
您对这里可能出什么问题有任何想法吗?
该表的排序规则是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
运算符:您的解决方案可能看起来像这样:
SELECT * FROM table WHERE BINARY a = BINARY b;
要么,
SELECT * FROM table ORDER BY BINARY a;