首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >排除mysql中的“非法混合排序规则”错误

排除mysql中的“非法混合排序规则”错误
EN

Stack Overflow用户
提问于 2010-06-13 00:23:43
回答 16查看 331.1K关注 0票数 247

尝试通过MySQL中的存储过程执行select操作时出现以下错误。

对于操作'=‘,

排序规则(latin1_general_cs,IMPLICIT)和(latin1_general_ci,IMPLICIT)的非法混合

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

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

EN

回答 16

Stack Overflow用户

发布于 2010-06-13 01:17:22

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

子句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运算符:

二进制字符串是CAST(字符串为二进制)的简写。

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

SELECT * FROM table WHERE BINARY a = BINARY b;

或,

SELECT * FROM table ORDER BY BINARY a;
票数 242
EN

Stack Overflow用户

发布于 2012-06-25 00:56:59

将我的2c添加到对未来谷歌人的讨论中。

我正在调查一个类似的问题,在使用接收varchar参数的自定义函数时,我得到了以下错误:

Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and 
(utf8_general_ci,IMPLICIT) for operation '='

使用以下查询:

mysql> show variables like "collation_database";
    +--------------------+-----------------+
    | Variable_name      | Value           |
    +--------------------+-----------------+
    | collation_database | utf8_general_ci |
    +--------------------+-----------------+

虽然表是使用utf8_unicode_ci定义的,但我能够分辨出DB使用的是utf8_general_ci

mysql> show table status;
    +--------------+-----------------+
    | Name         | Collation       |
    +--------------+-----------------+
    | my_view      | NULL            |
    | my_table     | utf8_unicode_ci |
    ...

请注意,这些视图具有NULL排序规则。视图和函数似乎都有排序规则定义,即使此查询对一个视图显示为null。使用的排序规则是在创建视图/函数时定义的DB排序规则。

可悲的解决方案是既更改数据库排序规则,又重新创建视图/函数,以强制它们使用当前排序规则。

  • 更改数据库的排序规则:

ALTER DATABASE mydb DEFAULT COLLATE utf8_unicode_ci;

  • Changing表排序规则:

ALTER TABLE utf8_unicode_ci; CONVERT TO字符集utf8 COLLATE mydb

我希望这能对某些人有所帮助。

票数 77
EN

Stack Overflow用户

发布于 2012-11-24 18:36:55

有时转换字符集可能是危险的,特别是在具有大量数据的数据库上。我认为最好的选择是使用“二元”运算符:

e.g : WHERE binary table1.column1 = binary table2.column1
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3029321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档