Если мы используем разные параметры сортировки для разных столбцов varchar для хранения строк и используем более одного такого столбца в запросе sql, то запрос sql может выдать ошибку «Недопустимое сочетание параметров сортировки». (Например, если мы хотим сравнить две строки несовместимого сопоставления или попытаться выбрать данные с другим сопоставлением в объединенный столбец).
Но это можно исправить, если мы укажем «COLLATE» в запросе. Например:
WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_ci
Но это побеждает любой ИНДЕКС, который у вас может быть.
Чтобы защититься от ошибок «Неверное сочетание сопоставлений», мы можем использовать varbinary.
varbinary использует меньше места, чем varchar, если для столбца varchar используется многобайтовая сортировка. (Двоичные строки не имеют наборов символов и параметров сортировки. Двоичные строки — это просто последовательность байтовых значений).
*** Кстати, набор символов - это набор символов и кодировок. Сопоставление — это набор правил для сравнения символов в наборе символов https://dev.mysql.com/doc/refman/5.7/en/charset-general.html
Но если вы выберете однобайтовый набор символов (например, latin1) вместо многобайтового набора символов (например, utf8 или ucs2), то требования к пространству для varbinary и varchar будут одинаковыми.
VARBINARY лучше, чем VARCHAR, если нет проверки достоверности. Например, если набор символов по умолчанию — UTF8, то это недопустимо:
CREATE TABLE t9 (s1 VARCHAR(5));
INSERT INTO t9 VALUES (0xF4808283);
Но это законно, потому что набор символов не имеет значения:
CREATE TABLE t10 (s1 VARBINARY(5));
INSERT INTO t10 VALUES (0xF4808283);
Итак, VARCHAR сравнивает символы, используя «сопоставление», а VARBINARY сравнивает байты. Большинство параметров сортировки «нечувствительны к регистру», поэтому верхний и нижний регистр считаются одинаковыми. Поскольку varbinary не использует сопоставление, операции поиска всегда чувствительны к регистру в случае varbinary.
person
sudip
schedule
27.01.2018
collate
. - person Martin Smith   schedule 12.05.2011