Groß- und Kleinschreibung wird nicht berücksichtigt

9

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.

    
user1091141 02.01.2012, 15:17
quelle

3 Antworten

4

Nun, es gibt zwei Möglichkeiten, dies zu erreichen:

  1. mit _bin Sortierung
  2. Ändern Sie Ihren Datentyp in VARBINARY

Fall 1: Verwenden der _bin-Sortierung

Erstellen Sie Ihre Tabelle wie folgt:

%Vor%

Bitte beachten Sie:

  1. der Datentyp der Spalte a
  2. der UNIQUE-Index für die Spalte a

Fall 2: Verwendung von VARBINARY dataype

Erstellen Sie Ihre Tabelle wie folgt:

%Vor%

Bitte beachten Sie:

  1. der neue Datentyp VARBINARY
  2. der UNIQUE-Index für die Spalte 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:

  1. Die BINARY- und VARBINARY-Datentypen
  2. Die binären und binären Sortierfolgen

Ich hoffe, das obige hilft!

    
Abhay 02.01.2012, 16:46
quelle
1

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.

    
broadband 21.08.2014 13:02
quelle
0
%Vor%

Probieren Sie es aus Es wird funktionieren .. es hat für mich funktioniert.

    
user3328257 31.12.2015 05:08
quelle

Tags und Links