Ошибка при сравнении текстовых столбцов в Mysql

Возникает ошибка illegal mix of collations (utf8_general_ci implicit) при запросе вида left join on t1.login = t2.login. Оба столбца - типа Text, кодировка таблицы одинаковая. В чем может быть дело?


Ответы (1 шт):

Автор решения: mournow

Разобрался. Нужно посмотреть виды сравнения (collation), а не кодировку таблиц (charset). Посмотрел так:

SELECT 
   table_schema,
   table_name,
   table_collation   
FROM information_schema.tables
WHERE table_schema in('users', 'orders', 'documents');

Пришел такой ответ:

table_schema table_name table_collation
users list utf8_unicode_ci
users roles utf8_unicode_ci
orders list utf8_general_ci
documents list utf8_general_ci

Тут я вижу, что у users.list и documents.list разные типы сравнения. Исправил сравнение (collation) у одной из таблиц:

alter table users.list convert to character set utf8mb3 collate utf8_general_ci;

Кодировка utfm8b3 может быть другой в зависимости от версии, как я полагаю. Мне подошла utf8bm3 как синоним utf8.

→ Ссылка