MySQL Нелегальное сочетание сортировок (utf8_unicode_ci, IMPLICIT) и (utf8_general_ci, IMPLICIT) для операции '='

Мне нужна ваша помощь в определении причины этой ошибки.

Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

Процедура работала до вчерашнего дня, и сегодня она начала давать ошибку незаконное сочетание сортировок. Я проверил каждую таблицу моей базы данных, и все таблицы и ее столбцы находятся в одной кодировке и сортировке, которая: - utf8 utf8_unicode_ci.

Я создал другую схему с тем же structrue и попытался выполнить тот же запрос, который работает отлично, но не по исходной схеме.

может ли кто-нибудь предоставить какие-либо данные по этому поводу? Почему так происходит?

Ответ 1

У меня была такая же проблема, и я обнаружил, что таблицы имеют одинаковое сопоставление, но столбцы этого не делают. Вы можете скачать пробную версию mysqlyog, а в другой таблице отключить опцию скрытия языка. Самый быстрый способ увидеть.

Ответ 2

в моем случае это было из-за глупого mysql workbench - он каким-то образом добавляет к сортировке по умолчанию процедуры из схемы (к некоторым метаданным или к чему), а затем, если вы сопоставляете что-либо в процедуре с различной сортировкой, это исключение возникает;

должен установить правильную (ту, которая используется в процедуре) сопоставление с схемой, а затем переделать процедуру и применить изменения (необходимо сохранить или воссоздать), и теперь все в порядке

Ответ 3

Каждый параметр функции concat необходимо преобразовать.

CONCAT(CONVERT(field_A USING utf32), CONVERT(field_B USING utf32))

Или, что когда-либо срабатывало у вас с проблемой.

Ответ 4

моя проблема была такой же, но в моем случае достаточно было использовать преобразование перед использованием SQL-оператора - в php

iconv(...)