Wenn wir verschiedene Sortierreihen für verschiedene varchar-Spalten verwenden, um Zeichenketten zu speichern, und mehr als eine solche Spalte in einer SQL-Abfrage verwenden, dann kann die SQL-Abfrage den Fehler "Ungültige Mischung von Sortierreihen" auslösen. (z.B. wenn wir zwei Strings mit inkompatibler Sortierung vergleichen wollen oder versuchen, Daten mit unterschiedlicher Sortierung in einer kombinierten Spalte auszuwählen).
Aber das kann behoben werden, wenn wir "COLLATE" in der Abfrage angeben. Zum Beispiel :
WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_ci
Aber das macht jeden INDEX zunichte, den Sie vielleicht haben.
Um die Fehlermeldung "Ungültige Kombination von Sortierreihen" zu vermeiden, können wir varbinary verwenden.
varbinary benötigt weniger Platz als varchar, wenn für die varchar-Spalte eine Multi-Byte-Sortierung verwendet wird. (Binäre Zeichenfolgen haben keine Zeichensätze und Sortierreihenfolgen. Binäre Zeichenketten sind lediglich eine Folge von Byte-Werten).
*** Ein Zeichensatz ist eine Menge von Symbolen und Kodierungen. Eine Kollation ist ein Satz von Regeln für den Vergleich von Zeichen in einem Zeichensatz https://dev.mysql.com/doc/refman/5.7/en/charset-general.html
Wenn Sie jedoch einen Ein-Byte-Zeichensatz (z. B. latin1) anstelle eines Multi-Byte-Zeichensatzes (z. B. utf8 oder ucs2) wählen, dann ist der Platzbedarf für varbinary und varchar gleich.
VARBINARY ist besser als VARCHAR, wenn es keine Gültigkeitsprüfung gibt. Wenn zum Beispiel der Standardzeichensatz UTF8 ist, ist dies illegal:
CREATE TABLE t9 (s1 VARCHAR(5));
INSERT INTO t9 VALUES (0xF4808283);
Dies ist jedoch legal, da der Zeichensatz keine Rolle spielt:
CREATE TABLE t10 (s1 VARBINARY(5));
INSERT INTO t10 VALUES (0xF4808283);
VARCHAR vergleicht also Zeichen unter Verwendung einer "Sortierung" und VARBINARY vergleicht Bytes. Die meisten Sortierverfahren unterscheiden nicht zwischen Groß- und Kleinschreibung, so dass Groß- und Kleinbuchstaben als gleichwertig betrachtet werden. Da varbinary keine Sortierreihenfolge verwendet, wird bei den Suchoperationen im Falle von varbinary immer die Groß- und Kleinschreibung berücksichtigt.