Ich habe eine Tabelle mit einem Feld mit der Codierung utf8 und Kollation utf8_unicode_ci:
%Vor%Die Sortierfolge utf8_unicode_ci ist für eine effiziente Groß- / Kleinschreibung Suche mit Erweiterungen und Ligationen erforderlich. Zu diesem Zweck habe ich den Index:
%Vor%Problem: Zusätzlich muss ich sicherstellen, dass alle gespeicherten Werte des Feldes a eindeutig sind, aber auf eine Groß- / Kleinschreibung Weise. Das deutsche Beispiel: "blühen" und "Blühen" müssen beide in der Tabelle gespeichert sein. Aber "Blühen" ein zweites Mal hinzufügen sollte nicht möglich sein.
Gibt es eine eingebaute Funktionalität in MySQL, um beides zu haben?
Leider scheint es nicht möglich, die Sortierung für den Index in MySQL 5.1 zu setzen.
Lösungen für dieses Problem umfassen eine Eindeutigkeitsprüfung vor dem Einfügen oder einen Trigger. Beide sind viel weniger elegant als die Verwendung eines einzigartigen Index.
Nun, es gibt zwei Möglichkeiten, dies zu erreichen:
Fall 1: Verwenden der _bin-Sortierung
Erstellen Sie Ihre Tabelle wie folgt:
%Vor%Bitte beachten Sie:
a
a
Fall 2: Verwendung von VARBINARY dataype
Erstellen Sie Ihre Tabelle wie folgt:
%Vor%Bitte beachten Sie:
a
Also, beide oben werden Ihren Zweck lösen. Das heißt, sie erlauben beide Werte wie 'abc', 'Abc', 'ABC', 'aBc' usw., erlauben aber nicht den gleichen Wert, wenn der Fall übereinstimmt.
Bitte beachten Sie, dass die Angabe einer "_bin" -Kortierung sich von der Verwendung des binären Datentyps unterscheidet. Bitte zögern Sie nicht, auf die folgenden Links zu verweisen:
Ich hoffe, das obige hilft!
Sie können dies erreichen, indem Sie die zusätzliche Spalte 'column_lower' hinzufügen.
%Vor%Fügen Sie Folgendes ein:
%Vor%Bei der Auswahl kann jetzt die Groß- / Kleinschreibung nicht beachtet werden:
%Vor%Beachten Sie, dass die Spalte, die einen Index enthält, maximal 191 Zeichen speichern kann. MySQL kann maximal 767 Bytes langen Index haben, das ist 767/4 (Unicode kann bis zu 4 Bytes dauern, wenn Sie die utf8mb4-Kollatierung verwenden) = 191.75 = 191 Zeichen. Wenn Sie die utf8-Sortierung verwenden, die maximal 3 Byte pro Zeichen enthält, kann die Spalte maximal 767/3 = 255 Zeichen enthalten.
Probieren Sie es aus Es wird funktionieren .. es hat für mich funktioniert.