我得到下面的错误时,试图做一个选择通过一个存储过程在MySQL。
操作'='的排序规则(latin1_general_cs,IMPLICIT)和(latin1_general_ci,IMPLICIT)的非法混合
你知道哪里出了问题吗?
该表的排序规则为latin1_general_ci, where子句中的列的排序规则为latin1_general_cs。
我得到下面的错误时,试图做一个选择通过一个存储过程在MySQL。
操作'='的排序规则(latin1_general_cs,IMPLICIT)和(latin1_general_ci,IMPLICIT)的非法混合
你知道哪里出了问题吗?
该表的排序规则为latin1_general_ci, where子句中的列的排序规则为latin1_general_cs。
当前回答
下面的方法对我很有效。
CONVERT( Table1.FromColumn USING utf8) = CONVERT(Table2.ToColumn USING utf8)
其他回答
我使用ALTER DATABASE mydb DEFAULT COLLATE utf8_unicode_ci;,但没有工作。
在此查询中:
Select * from table1, table2 where table1.field = date_format(table2.field,'%H');
这对我来说很有用:
Select * from table1, table2 where concat(table1.field) = date_format(table2.field,'%H');
是的,只有一个concat。
MySQL真的不喜欢混合排序规则,除非它可以将它们强制到同一个排序规则(这在您的情况下显然是不可行的)。难道不能通过COLLATE子句强制使用相同的排序规则吗?(或更简单的二进制快捷方式,如果适用…)
我个人在一次手术中遇到过这个问题。 如果你不想改变表,你可以尝试将你的参数转换为过程。 我已经尝试了几次使用collate(与一个集到选择),但没有一个适合我。
CONVERT(my_param USING utf32)做到了这一点。
下面的方法对我很有效。
CONVERT( Table1.FromColumn USING utf8) = CONVERT(Table2.ToColumn USING utf8)
这段代码需要放在运行SQL查询/数据库查询
SQL查询窗口
ALTER TABLE `table_name` CHANGE `column_name` `column_name` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL;
请用合适的名称替换table_name和column_name。