it-swarm.com.de

Unterschied zwischen utf8mb4_unicode_ci und utf8mb4_unicode_520_ci Kollatierungen in MariaDB/MySQL?

Ich habe mich bei MariaDB/MySQL angemeldet und eingegeben:

SHOW COLLATION;

Ich sehe utf8mb4_unicode_ci und utf8mb4_unicode_520_ci unter den verfügbaren Kollatierungen. Was ist der Unterschied zwischen diesen beiden Sortierungen und welche sollten wir verwenden?

23
Flux

Nun müssen Sie in der Dokumentation nachlesen. Ich kann Ihnen nicht sagen, was Sie verwenden sollten, da jedes Projekt anders ist. 

10.1.3 Namenskonventionen für Kollatierungen

MySQL-Kollatierungsnamen folgen diesen Konventionen:

Ein Kollatierungsname beginnt mit dem Namen des Zeichensatzes, dem er zugeordnet ist, gefolgt von einem oder mehreren Suffixen, die andere Kollatierungsmerkmale angeben. Beispielsweise sind utf8_general_ci und latin_swedish_ci Kollatierungen für die Zeichensätze utf8 und latin1.

Eine sprachspezifische Kollatierung enthält einen Sprachnamen. Beispielsweise sortieren utf8_turkish_ci und utf8_hungarian_ci die Zeichen für den utf8-Zeichensatz nach den Regeln von Türkisch bzw. Ungarisch.

Die Groß- und Kleinschreibung für die Sortierung wird durch _ci (Groß- und Kleinschreibung nicht beachtet), _cs (Groß- und Kleinschreibung) und _bin (binär; Zeichenvergleiche basieren auf Zeichen-Binärcode-Werten) angegeben. Beispielsweise ist für latin1_general_ci die Groß- und Kleinschreibung nicht relevant, für latin1_general_cs ist die Groß- und Kleinschreibung zu beachten, und latin1_bin verwendet binäre Codewerte.

Bei Unicode können Kollatierungsnamen eine Versionsnummer enthalten, um die Version des Unicode-Kollatierungsalgorithmus (UCA) anzugeben, auf der die Kollatierung basiert. UCA-basierte Kollatierungen ohne Versionsnummer im Namen verwenden die UCA-Gewichtsschlüssel der Version 4.0.0. Zum Beispiel:

utf8_unicode_ci (ohne benannte Version) basiert auf UCA 4.0.0-Gewichtsschlüsseln> ( http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt ).

utf8_unicode_520_ci basiert auf UCA 5.2.0-Gewichtsschlüsseln ( http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt ).

Bei Unicode behalten die xxx_general_mysql500_ci-Kollatierungen die Reihenfolge der ursprünglichen xxx_general_ci-Kollatierungen vor 5.1.24 bei und ermöglichen Upgrades für Tabellen, die vor MySQL 5.1.24 erstellt wurden. Weitere Informationen finden Sie in Abschnitt 2.11.3, „Prüfen, ob Tabellen oder Indizes neu erstellt werden müssen“ und Abschnitt 2.11.4, „Neuerstellen oder Reparieren von Tabellen oder Indizes“.

Quelle: https://dev.mysql.com/doc/refman/5.6/de/charset-collation-names.html

27
StuiterSlurf

Weitere Informationen zu den tatsächlichen Unterschieden finden Sie unter https://dev.mysql.com/worklog/task/?id=2673 und klicken Sie auf "High Level Architecture".

4
Peter Gulutzan

Ich werde @StuiterSlurf Antwort entwickeln und mich auf Details von utf8mb4_unicode_ciutf8mb4_unicode_520_ci konzentrieren:

Wie Sie hier (_/Peter Gulutzan) lesen können, gibt es Probleme beim Sortieren/Vergleichen des polnischen Buchstaben "Ł" (L mit Strich) (Kleinschreibung: "ł"; html esc: ł und Ł) - Wir haben folgende Annahme in der Codierung: 

utf8_polish_ci      Ł greater than L and less than M
utf8_unicode_ci     Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci     Ł greater than Z

In polnischer Sprache steht der Buchstabe £ nach dem Buchstaben L und vor dem Buchstaben M. Und für ein anderes Kodierungssystem erhalten Sie unterschiedliche Sortierergebnisse. Keine dieser Kodierungen ist besser oder schlechter - sie hängt von Ihren Bedürfnissen ab. 

1