MySQL 中的非法排序规则错误:解决排序规则混合
将值与不同的字符集或排序规则。让我们在查询的上下文中分析此问题:
<code class="sql">SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM ratings WHERE month='Aug' AND username IN (SELECT username FROM users WHERE gender =1) GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC</code>
将以下行添加到查询中时:
<code class="sql">AND username IN (SELECT username FROM users WHERE gender =1)</code>
您遇到了“非法混合排序规则”错误。这是因为评级表中的用户名列可能与用户表中的用户名列具有不同的排序规则。
识别不正确的排序规则:
确定哪个列导致排序规则冲突,请使用以下查询:
<code class="sql">SELECT table_schema, table_name, column_name, character_set_name, collation_name FROM information_schema.columns WHERE collation_name = 'latin1_general_ci' ORDER BY table_schema, table_name, ordinal_position;</code>
此查询将显示具有排序规则 latin1_general_ci 的表和列。
解决问题:
要解决该错误,请将排序规则不正确的表转换为所需的排序规则,通常为 latin1_swedish_ci。使用以下查询:
<code class="sql">ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';</code>
其中 tbl_name 是排序规则不正确的表的名称。
通过解决排序规则冲突,修改后的查询应该成功执行。
以上是如何修复 MySQL 中的“非法混合排序规则”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!