Was bedeutet Zeichensatz und Sortierung bedeutet das genau?
-
19-08-2019 - |
Frage
kann ich lesen Sie die MySQL Dokumentation und es ist ziemlich klar. Aber wie entscheidet man, welchen Zeichensatz zu benutzen? Auf welche Daten hat Sortierungs einen Effekt?
Ich frage nach einer Erklärung der beiden und wie sie wählen.
Lösung
Von MySQL docs :
Zeichensatz ist ein Satz von Symbolen und Kodierungen. Ein Sortierungs ist ein Satz von Regeln für Zeichen in einem Vergleich Zeichensatz. Lassen Sie uns die Unterscheidung klar mit einem Beispiel ein imaginärer Zeichensatz.
Nehmen wir an, dass wir ein Alphabet haben mit vier Buchstaben: 'A', 'B', 'a', 'b'. Wir gibt jedem Buchstaben eine Zahl: 'A' = 0, 'B' = 1 ist, 'a' = 2, 'b' = 3. Der Buchstabe ‚A‘ ist ein Symbol, die Zahl 0 die Codierung für ‚A‘, und die Kombination alle vier Buchstaben und ihre Kodierungen ist ein Zeichensatz.
Nun sei angenommen, dass wir vergleichen wollen zwei Stringwerte, ‚A‘ und ‚B‘. Das einfachste Weg, dies zu tun ist, zu betrachten die Codierungen: 0 für ‚A‘ und 1 für 'B'. Da 0 kleiner als 1 ist, sagen wir ‚A‘ ist kleiner als ‚B‘. Nun, was wir haben gerade getan ist eine Sortierung gelten unsere Zeichensatz. Die Sortierung ist ein Satz von Regeln (nur eine Regel in diesem Fall): „Vergleichen die Kodierungen.“ Wir nennen dies einfachste aller möglichen Sortierungen ein Binärsortierung.
Aber was ist, wenn wir sagen wollen, dass die Klein- und Großbuchstaben sind Äquivalent? Dann hätten wir bei mindestens zwei Regeln: (1) Behandlung der Kleinbuchstabe ‚a‘ und ‚b‘ als entspricht ‚A‘ und ‚B‘; (2) dann Vergleichen Sie die Kodierungen. Wir nennen dies eine Groß- und Kleinschreibung Sortierung. Es ist ein etwas komplexer als ein binären Sortierung.
Im wirklichen Leben, die meisten Zeichensätze haben viele Zeichen: nicht nur ‚A‘ und ‚B‘ sondern ganze Alphabete, manchmal mehrere Alphabete oder östlicher Schreib Systeme mit Tausenden von Zeichen, zusammen mit vielen Sonderzeichen und Satzzeichen. Auch im wirklichen Leben, die meisten Sortierungen haben viele Regeln: nicht nur Groß- und Kleinschreibung, sondern auch accent Unempfindlichkeit (ein „Akzent“ ist ein angebracht Markierung zu einem Charakter, wie in Deutsch ‚ö‘) und mehrere Zeichen Mappings (wie die Regel, die ‚O‘ = ‚OE‘ in einer der beiden deutschen Sortierungen).
Andere Tipps
A Zeichencodierung ist eine Möglichkeit, Zeichen zu codieren, damit sie in den Speicher passen. Das heißt, wenn der Zeichensatz ist ISO-8859-15, das Euro-Symbol, € wird als 0xa4 codiert werden, und in UTF-8, wird es 0xe282ac sein.
Die Sortierungs wird, wie Zeichen zu vergleichen, in LATIN9 gibt es Buchstaben als e é è ê f
, wenn sie von ihrer binären Darstellung sortiert, wird es e f é ê è
gehen, aber wenn die Sortierung eingestellt ist, zum Beispiel, Französisch, werden Sie sie in der Reihenfolge haben Sie dachten, sie wäre, die alle e é è ê
ist gleich sind, und dann f
.
Ein Zeichensatz ist eine Teilmenge aller schriftlichen Glyphen. Eine Zeichencodierung gibt an, wie die Zeichen in numerische Werte abgebildet werden. Einige Zeichencodierungen wie UTF-8 und UTF-16, kann ein beliebiges Zeichen in der Universal Character Set kodieren. Andere, wie US-ASCII oder ISO-8859-1 kann nur eine kleine Teilmenge kodieren, da sie verwenden 7 und 8 Bit pro Zeichen sind. Da beide viele Standards einen Zeichensatz angeben und eine Zeichenkodierung, wird der Begriff „Zeichensatz“ oft frei für „Zeichencodierung“ ersetzt.
Eine Zusammenstellung enthält Regeln, die festlegen, wie können Zeichen für die Sortierung verglichen werden. Sortierungen Regeln können locale spezifisch sein. Die richtige Reihenfolge von zwei Zeichen variiert von Sprache zu Sprache
Die Wahl eines Zeichensatz und Sortier kommt darauf an, ob Ihre Anwendung ist internationalisiert oder nicht. Wenn nicht, welche locale zielen Sie ab?
Um zu entscheiden, welche Zeichensatz unterstützen wollen, müssen Sie Ihre Anwendung in Betracht ziehen. Wenn Sie Benutzereingaben speichern, könnte es schwierig sein, alle Gegenden voraussehen, in dem Sie Ihre Software wird schließlich verwendet werden. Um sie alle zu unterstützen, könnte es am besten sein, die UCS (Unicode) von Anfang an zu unterstützen. Allerdings gibt es ein Kosten dazu; viele westeuropäischen Zeichen werden nun benötigen zwei Byte Speicherplatz pro Zeichen statt einem.
die richtige Zusammenstellung wählen kann Leistung helfen, wenn Ihre Datenbank die Sortierung verwendet einen Index zu erstellen, und später verwendet, dass Index sortierten Ergebnisse zu liefern. da Kollatierungsregeln sind oft länderspezifische, wird jedoch, dass Index wertlos sein, wenn Sie Ergebnisse sortieren müssen nach den Regeln eines anderen locale.
Ich schlage vor, utf8mb4_unicode_ci
zu verwenden, die auf dem Unicode-Standard für die Sortierung und Vergleich basiert, die genau in einem sehr weiten Bereich von Sprachen sortiert.