Поиск и устранение неисправностей “Недопустимого соединения сопоставлений” ошибка в mysql

Добираюсь ниже ошибки при попытке сделать выбор через хранимую процедуру в MySQL.

Недопустимое соединение сопоставлений (latin1_general_cs, НЕЯВНЫЙ) и (latin1_general_ci, НЕЯВНЫЙ) для операции '='

Какая-либо идея о том, что могло бы идти не так, как надо здесь?

Сопоставление таблицы latin1_general_ci и тот из столбца в, где пункт latin1_general_cs.

191
задан user355562 4 August 2014 в 08:07
поделиться

2 ответа

Обычно это вызвано сравнением двух строк несовместимых параметров сортировки или попыткой выбрать данные с разными параметрами сортировки в объединенный столбец.

Предложение 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;
199
ответ дан 23 November 2019 в 05:32
поделиться

MySQL очень не любит смешивать коллизии, если только не может принудить их к одной и той же (что явно не осуществимо в вашем случае). Не можете ли вы просто заставить использовать одну и ту же коллизию с помощью COLLATE clause? (или более простое сокращение BINARY, если это применимо...).

1
ответ дан 23 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: