我得到下面的错误时,试图做一个选择通过一个存储过程在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。
当前回答
有时转换字符集可能是危险的,特别是在具有大量数据的数据库上。我认为最好的选择是使用“二进制”操作符:
e.g : WHERE binary table1.column1 = binary table2.column1
其他回答
我使用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。
有时转换字符集可能是危险的,特别是在具有大量数据的数据库上。我认为最好的选择是使用“二进制”操作符:
e.g : WHERE binary table1.column1 = binary table2.column1
这段代码需要放在运行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。
把我的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 |
+--------------------+-----------------+
我能够告诉DB使用utf8_general_ci,而表是使用utf8_unicode_ci定义的:
mysql> show table status;
+--------------+-----------------+
| Name | Collation |
+--------------+-----------------+
| my_view | NULL |
| my_table | utf8_unicode_ci |
...
注意,视图具有NULL排序规则。视图和函数似乎有排序规则定义,即使该查询为一个视图显示为空。使用的排序规则是创建视图/函数时定义的DB排序规则。
可悲的解决方案是既改变db排序规则,又重新创建视图/函数,迫使它们使用当前的排序规则。
更改db的排序规则: ALTER DATABASE mydb DEFAULT COLLATE utf8 更改表格排序规则: ALTER TABLE mydb CONVERT TO CHARACTER SET utf8 COLLATE
我希望这能帮助到一些人。
排序规则问题的另一个来源是mysql。proc表。检查存储过程和函数的排序规则:
SELECT
p.db, p.db_collation, p.type, COUNT(*) cnt
FROM mysql.proc p
GROUP BY p.db, p.db_collation, p.type;
还要注意mysql.proc。Collation_connection和mysql.proc。character_set_client列。