【发布时间】:2010-12-07 11:06:48
【问题描述】:
我在 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 控制台查询排序规则变量也会得到相同的结果),它运行这个存储过程没有任何问题。
感谢您的帮助。
【问题讨论】:
-
我刚刚发现我的一个表的排序规则设置为
utf8_general_ci设置,这在我的数据库中不正确,这就是原因。感谢您花时间回答这个问题。
标签: mysql ruby-on-rails stored-procedures