Ein Zeichensatz ist ein Satz von Symbolen und Codierungen. Eine Sortierung ist ein Satz von Regeln zum Vergleichen von Zeichen in einem Zeichensatz. Lassen Sie uns die Unterscheidung anhand eines Beispiels eines imaginären Zeichensatzes verdeutlichen.
Angenommen, wir haben ein Alphabet mit vier Buchstaben: 'A', 'B', 'a', 'b'. Wir geben jedem Buchstaben eine Zahl: 'A' = 0, 'B' = 1, 'a' = 2, 'b' = 3. Der Buchstabe 'A' ist ein Symbol, die Zahl 0 ist die Kodierung für 'A' und die Kombination aller vier Buchstaben und ihrer Kodierungen ist ein Zeichensatz.
Angenommen, wir möchten zwei Zeichenfolgenwerte vergleichen, 'A' und 'B'. Der einfachste Weg, dies zu tun, besteht darin, sich die Codierungen anzusehen: 0 für 'A' und 1 für 'B'. Da 0 kleiner als 1 ist, sagen wir, dass 'A' kleiner als 'B' ist. Was wir gerade getan haben, ist eine Kollatierung auf unseren Zeichensatz anzuwenden. Die Sortierung besteht aus einer Reihe von Regeln (in diesem Fall nur eine Regel): "Vergleichen Sie die Codierungen." Wir nennen diese einfachste aller möglichen Kollatierungen eine binäre Kollatierung.
Aber was ist, wenn wir sagen wollen, dass Klein- und Großbuchstaben gleichwertig sind? Dann hätten wir mindestens zwei Regeln: (1) Behandle die Kleinbuchstaben 'a' und 'b' als äquivalent zu 'A' und 'B'; (2) Vergleichen Sie dann die Codierungen. Wir nennen dies eine Kollatierung ohne Berücksichtigung der Groß- und Kleinschreibung. Es ist etwas komplexer als eine binäre Zusammenstellung.
Im wirklichen Leben haben die meisten Zeichensätze viele Zeichen: nicht nur 'A' und 'B', sondern ganze Alphabete, manchmal mehrere Alphabete oder östliche Schriftsysteme mit Tausenden von Zeichen, zusammen mit vielen speziellen Symbolen und Satzzeichen. Auch im wirklichen Leben haben die meisten Kollatierungen viele Regeln: nicht nur Groß- und Kleinschreibung, sondern auch Akzentunempfindlichkeit (ein "Akzent" ist eine Markierung, die einem Zeichen wie im deutschen 'ö' zugeordnet ist) und Zuordnungen mit mehreren Zeichen (wie die Regel, dass ' ö '=' OE 'in einer der beiden deutschen Zusammenstellungen).
Ein Zeichensatz ist eine Teilmenge aller geschriebenen Glyphen. Eine Zeichenkodierung gibt an, wie diese Zeichen numerischen Werten zugeordnet werden. Einige Zeichenkodierungen, wie UTF-8 und UTF-16, können jedes Zeichen im universellen Zeichensatz codieren. Andere, wie US-ASCII oder ISO-8859-1, können nur eine kleine Teilmenge codieren, da sie 7 bzw. 8 Bit pro Zeichen verwenden. Da viele Standards sowohl einen Zeichensatz als auch eine Zeichenkodierung spezifizieren, wird der Begriff "Zeichensatz" häufig frei durch "Zeichenkodierung" ersetzt.
Eine Sortierung enthält Regeln, die angeben, wie Zeichen zum Sortieren verglichen werden können. Sortierregeln können länderspezifisch sein: Die richtige Reihenfolge von zwei Zeichen variiert von Sprache zu Sprache.
Die Auswahl eines Zeichensatzes und einer Sortierung hängt davon ab, ob Ihre Anwendung internationalisiert ist oder nicht. Wenn nicht, auf welches Gebietsschema zielen Sie ab?
Um auszuwählen, welchen Zeichensatz Sie unterstützen möchten, müssen Sie Ihre Anwendung berücksichtigen. Wenn Sie vom Benutzer bereitgestellte Eingaben speichern, ist es möglicherweise schwierig, alle Gebietsschemas vorherzusagen, in denen Ihre Software möglicherweise verwendet wird. Um sie alle zu unterstützen, ist es möglicherweise am besten, das BKS (Unicode) von Anfang an zu unterstützen. Dies ist jedoch mit Kosten verbunden. Viele westeuropäische Zeichen benötigen jetzt zwei Bytes Speicherplatz pro Zeichen anstelle von einem.
Die Auswahl der richtigen Sortierung kann die Leistung verbessern, wenn Ihre Datenbank die Sortierung zum Erstellen eines Index verwendet und diesen Index später verwendet, um sortierte Ergebnisse bereitzustellen. Da Kollatierungsregeln jedoch häufig länderspezifisch sind, ist dieser Index wertlos, wenn Sie die Ergebnisse nach den Regeln eines anderen Gebietsschemas sortieren müssen.
quelle
Ich empfehle die Verwendung
utf8mb4_unicode_ci
, die auf dem Unicode-Standard zum Sortieren und Vergleichen basiert und in einer Vielzahl von Sprachen genau sortiert.quelle
UTF-8
Codierung in einem System außerhalb der Datenbank verwenden, sollte alles in der Datenbank auch richtig geschrieben sein, wenn Sieutf8mb4
in MySQL verwenden . Wenn es darum geht, Text für bestimmte Zeichen in MySQL richtig zu sortieren, zu vergleichen und zu transformieren , ist es schwierig, die perfekte Lösung zu finden, aber es*_unicode_ci
ist sicherlich besser als*_general
, aber es hat auch seine Nachteile. Bitte lesen Sie: dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html