Добираюсь ниже ошибки при попытке сделать выбор через хранимую процедуру в MySQL.
Недопустимое соединение сопоставлений (latin1_general_cs, НЕЯВНЫЙ) и (latin1_general_ci, НЕЯВНЫЙ) для операции '='
Какая-либо идея о том, что могло бы идти не так, как надо здесь?
Сопоставление таблицы latin1_general_ci
и тот из столбца в, где пункт latin1_general_cs
.
Обычно это вызвано сравнением двух строк несовместимых параметров сортировки или попыткой выбрать данные с разными параметрами сортировки в объединенный столбец.
Предложение COLLATE
позволяет указать параметры сортировки, используемые в запросе.
Например, следующее предложение WHERE
всегда будет выдавать сообщение об ошибке:
WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_cs
Ваше решение состоит в том, чтобы указать общие параметры сортировки для двух столбцов в запросе. Вот пример, в котором используется предложение COLLATE
:
SELECT * FROM table ORDER BY key COLLATE latin1_general_ci;
Другой вариант - использовать оператор BINARY
:
BINARY str - это сокращение для CAST (str AS BINARY).
Ваше решение может выглядеть примерно так:
SELECT * FROM table WHERE BINARY a = BINARY b;
или,
SELECT * FROM table ORDER BY BINARY a;
MySQL очень не любит смешивать коллизии, если только не может принудить их к одной и той же (что явно не осуществимо в вашем случае). Не можете ли вы просто заставить использовать одну и ту же коллизию с помощью COLLATE clause? (или более простое сокращение BINARY
, если это применимо...).