MySql中非法混合排序错误

Oli*_*ver 41 mysql collation mysql-error-1267

刚刚从上一个问题得到了这个答案,它有效!

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC
Run Code Online (Sandbox Code Playgroud)

但当我坚持这个额外的位时,会出现这个错误:

文档#1267 - 操作'='的非法混合排序(latin1_swedish_ci,IMPLICIT)和(latin1_general_ci,IMPLICIT)

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
Run Code Online (Sandbox Code Playgroud)

该表是:

id, username, rating, month

Dea*_*her 83

以下是如何检查哪些列是错误的排序规则:

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; 
Run Code Online (Sandbox Code Playgroud)

这是修复它的查询:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';
Run Code Online (Sandbox Code Playgroud)

链接


小智 18

检查每个表的排序规则类型,并确保它们具有相同的排序规则.

之后还检查您在操作中使用的每个表字段的排序规则类型.

我遇到了同样的错误,这些技巧对我有用.


Rot*_*otS 15

[MySQL的]

在这些(非常罕见的)情况下:

  • 两个表真正需要不同的排序规则类型
  • 值不是来自表,而是来自显式枚举,例如:

    SELECT 1 AS编号UNION ALL SELECT 2 UNION ALL SELECT 3

您可以使用CAST或CONVERT比较不同表之间的值:

CAST('my text' AS CHAR CHARACTER SET utf8)

CONVERT('my text' USING utf8)
Run Code Online (Sandbox Code Playgroud)

请参阅MySQL网站上的CONVERT和CAST文档.

  • 它们并不罕见,我经常在我们的多语言网站上看到它们。 (2认同)

pal*_*ife 5

我在PhpMyadmin上遇到了同样的错误,并且这里指出的解决方案对我有用

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

非法混合的归类MySQL错误 我也建议使用General而不是瑞典语,因为那是默认的,除非你的应用程序使用瑞典语,否则不使用该语言.