存储过程中非法混合的排序规则

时间:2010-12-07 11:06:48

标签: mysql ruby-on-rails stored-procedures

我在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控制台查询排序规则变量给出相同的结果),它运行这个存储过程没有任何问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:18)

快速修复,

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 */

永久修复

您可能需要使用正确/相同的排序规则重新创建数据库