недопустимое сочетание сопоставлений в MySQL для операции =

У меня есть таблица abc с двумя столбцами:

id INT(3) name VARCHAR(10)

Сортировка по умолчанию для этой таблицы и для всех ее столбцов — utf8_unicode_ci.

Затем у меня есть другая таблица xyz с двумя столбцами:

id INT(3) name VARCHAR(10)

Сортировка по умолчанию для этой таблицы и для всех ее столбцов также utf8_unicode_ci.

Теперь я запускаю этот оператор select:

SELECT NAME FROM abc WHERE ID NOT IN (SELECT ID FROM XYZ);

Я проверил сопоставления обеих таблиц, и они одинаковы, тем не менее, это дает мне ошибку: illegal mix of collations (utf8_general_ci implicit) and (utf8_unicode_ci implicit) for operation =

Я также попробовал альтернативу для NOT IN, то есть с использованием LEFT JOIN, но все равно выдает ту же ошибку.

Я уже давно застрял на этом. Любая помощь приветствуется. Спасибо


person Allan Fernandes    schedule 20.03.2018    source источник
comment
Я проверил сопоставления обеих таблиц, и они одинаковы, тем не менее, это дает мне ошибку: недопустимое сочетание сопоставлений (неявное utf8_general_ci) и (неявное utf8_unicode_ci) для работы = узнайте одну вещь, хорошо программируя компьютеры, не лгут ..   -  person Raymond Nijland    schedule 20.03.2018
comment
показать выходы SHOW CREATE TABLE abc и SHOW CREATE TABLE xyz.   -  person Raymond Nijland    schedule 20.03.2018
comment
Полный запрос и ошибка также помогут, поскольку я не понимаю, как вы получите ошибку сопоставления при сравнении двух значений INTEGER ID.   -  person Paul Campbell    schedule 20.03.2018


Ответы (1)


Вероятный обходной путь:

SELECT NAME
    FROM abc
    LEFT JOIN XYZ  USING(ID)
    WHERE XYZ.ID IS NULL;

Другая помощь может быть

SET NAMES utf8 COLLATE utf8_unicode_ci;
person Rick James    schedule 21.03.2018