存储过程中非法混合的排序规则
MySQL中的存储过程失败,出现Mysql::Error: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
。
在SELECT
子句中,它尝试将VARCHAR
列与传递给此过程的VARCHAR
参数进行比较时,该过程失败。
我表中的所有列都有utf8_unicode_ci
排序规则。 数据库整理是一样的。 我甚至在`/config/database.yml中指定了排序规则。
但是,当我运行/script/console
我设置了以下变量:
>> ActiveRecord::Base.connection.select_rows "show variables like '%colla%'" => [["collation_connection", "utf8_general_ci"], ["collation_database", "utf8_unicode_ci"], ["collation_server", "utf8_general_ci"]]
可能最有趣的事实是我在相同的MySQL服务器上有另一个数据库具有相同的排序规则(甚至从Rails控制台查询排序规则变量给出相同的结果),它运行这个存储过程没有任何问题。
谢谢你的帮助。
要快速修复,
SELECT * FROM YOUR_TABLE WHERE YOUR_COL=@YOUR_VARIABLES COLLATE utf8_general_ci;
要么
SELECT * FROM YOUR_TABLE WHERE YOUR_COL=@YOUR_VARIABLES COLLATE unicode_ci; /* depends on the collation for YOUR_COL */
永久修复
- http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_collation_server
- http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_collation_database
您可能需要使用正确/相同的排序规则重新创建数据库