Неверное смешение параметров сортировки в хранимой процедуре - PullRequest
13 голосов
/ 07 декабря 2010

моя хранимая процедура в 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 Ответ

18 голосов
/ 07 декабря 2010

Для быстрого исправления,

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

Постоянное исправление

Возможно, вам потребуется заново создать базу данных, используя правильное / такое же сопоставление

...