30
Illegal mix of collations for operation ‘like’
Баги, глюки, ошибки, недочеты, Программирование
Метки (теги) : collate, db, like, mysql, база данных, бд
Составляя очень большой запрос для поиска к базе данных 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” нужно заменить на нужную вам кодировку.
Если возникнут вопросы, не стесняйтесь и не ленитесь, оставляйте их в комментариях.
Всего доброго!