it-swarm.com.de

Was bedeuten Zeichensatz und Kollatierung genau?

Ich kann die MySQL Dokumentation lesen und es ist ziemlich klar. Aber wie entscheidet man, welcher Zeichensatz verwendet wird? Auf welche Daten wirkt sich die Sortierung aus?

Ich bitte um eine Erklärung der beiden und wie man sie auswählt.

295
Sander Versluys

Aus MySQL docs :

Ein Zeichensatz ist ein Satz von Symbolen und Kodierungen. Eine Sortierung ist eine Reihe von Regeln zum Vergleichen von Zeichen in einem Zeichensatz. Verdeutlichen wir die Unterscheidung anhand eines Beispiels für einen imaginären Zeichensatz.

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, 'A' und 'B', vergleichen. Am einfachsten ist es, 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. Wir haben gerade eine Sortierung auf unseren Zeichensatz angewendet. Die Kollatierung besteht aus einer Reihe von Regeln (in diesem Fall nur aus einer Regel): "Vergleichen Sie die Kodierungen." Wir nennen diese einfachste aller möglichen Kollatierungen eine binäre Kollatierung.

Was aber, 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 Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung. Es ist etwas komplexer als eine binäre Kollation.

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 die Unempfindlichkeit gegen Groß- und Kleinschreibung, sondern auch die Unempfindlichkeit gegen Akzente (ein "Akzent" ist eine Markierung, die mit einem Zeichen wie dem deutschen "ö" verbunden ist) und Zuordnungen mehrerer Zeichen (wie die Regel, dass " ö '=' OE 'in einer der beiden deutschen Kollationen).

486
Dan Esparza

Ein Zeichencodierung ist eine Möglichkeit, Zeichen so zu codieren, dass sie in den Speicher passen. Wenn der Zeichensatz ISO-8859-15 ist, wird das Euro-Symbol € als 0xa4 und in UTF-8 als 0xe282ac codiert.

Die Kollation ist wie man Zeichen vergleicht, in latin9 gibt es Buchstaben als e é è ê f, wenn nach ihrer binären Darstellung sortiert, geht es e f é ê è aber wenn die Kollatierung zum Beispiel auf Französisch eingestellt ist, werden sie in der Reihenfolge angezeigt, in der Sie sie erwartet haben. Dies ist alles von e é è ê sind gleich und dann f.

194
mat

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 alle Zeichen im universellen Zeichensatz kodieren. Andere, wie US-ASCII oder ISO-8859-1, können nur eine kleine Teilmenge codieren, da sie 7 bzw. 8 Bits pro Zeichen verwenden. Da viele Standards sowohl einen Zeichensatz als auch eine Zeichenkodierung spezifizieren, wird der Begriff "Zeichensatz" häufig frei für "Zeichenkodierung" eingesetzt.

Eine Kollatierung umfasst Regeln, die festlegen, wie Zeichen zum Sortieren verglichen werden können. Kollatierungsregeln können länderspezifisch sein: Die richtige Reihenfolge von zwei Zeichen variiert von Sprache zu Sprache.

Bei der Auswahl eines Zeichensatzes und einer Sortierung kommt es darauf an, 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 UCS (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 Kollatierung kann die Leistung verbessern, wenn Ihre Datenbank die Kollatierung 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.

20
erickson

Ich empfehle utf8mb4_unicode_ci, das auf dem Unicode-Standard zum Sortieren und Vergleichen basiert und in einer Vielzahl von Sprachen genau sortiert.

3
simhumileco