Подтвердить что ты не робот

Недопустимое сочетание сортировок в хранимой процедуре

моя хранимая процедура в 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 дает одинаковые результаты), которая без проблем запускает эту хранимую процедуру.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Чтобы быстро исправить,

SELECT * FROM YOUR_TABLE 
WHERE [email protected]_VARIABLES COLLATE utf8_general_ci;

ИЛИ

SELECT * FROM YOUR_TABLE 
WHERE [email protected]_VARIABLES COLLATE unicode_ci;
/* depends on the collation for YOUR_COL */

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

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