Illegal mix of collations for operation ‘like’

Баги, глюки, ошибки, недочеты, Программирование

Метки (теги) : , , , , ,

Автор: admin

Составляя очень большой запрос для поиска к базе данных mysql используя union, заметил, что если вводить в поиск латинские символы то проблем не возникает, а вот если кириллицу то выдает вот такую ошибку Illegal mix of collations for operation ‘like’ . Дело все в том что я использовал оператор LIKE для поиска. Но если в базе данных “collate” для сортировки стоит не такой же кодировки как и данные в таблицах, то возникает данная ошибка.

Сначала я просмотрел переменные в mysql вот таким запросом

SHOW VARIABLES LIKE ‘%collation%’

выдало мне такое

Variable_name Value
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_unicode_ci

Как видно collation_server отличается от всех остальных. В этом то и загвоздка. Но так как я не мог на хостинге исправить этот параметр из-за недостаточности прав, пришлось идти обходным путем.

В запросе после каждого оператора LIKE я вставлял такую запись COLLATE utf8_unicode_ci

И только тогда стало все нормально работать.

Вот пример возможного запроса

SELECT id, name FROM users WHERE name LIKE “%asy%”  COLLATE utf8_unicode_ci

Конечно же  “utf8_unicode_ci” нужно заменить на нужную вам кодировку.

Если возникнут вопросы, не стесняйтесь и не ленитесь, оставляйте их в комментариях.

Всего доброго!

Оставить комментарий