341 Stimmen

Was bedeuten Zeichensatz und Sortierung genau?

Ich kann die MySQL Dokumentation und es ist ziemlich klar. Aber wie kann man entscheiden, welchen Zeichensatz man verwenden soll? Auf welche Daten hat die Sortierung einen Einfluss?

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

544voto

Dan Esparza Punkte 27398

Von MySQL docs :

A Zeichensatz ist eine Menge von Symbolen und Kodierungen. A Kollation i Regeln für c Zeichensatz. Lassen Sie uns die Unterscheidung anhand eines Beispiels verdeutlichen eines imaginären Zeichensatzes.

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 aus allen vier Buchstaben und ihren Kodierungen ist ein Zeichensatz.

Nehmen wir nun an, wir wollen zwei String-Werte, 'A' und 'B'. Die einfachste Weg, dies zu tun, ist die Betrachtung die Kodierungen: 0 für 'A' und 1 für 'B'. Da 0 kleiner als 1 ist, sagen wir A' ist kleiner als 'B'. Was wir jetzt getan haben gerade eine Sortierung auf unseren Zeichensatz angewendet Zeichensatz. Die Sortierung ist ein Satz von Regeln (in diesem Fall nur eine Regel): "Vergleiche die Kodierungen". Wir nennen diese einfachste aller möglichen Kollationen eine binäre Sortierung.

Aber was ist, wenn wir die Kleinbuchstaben und Großbuchstaben gleichwertig sind? Dann hätten wir mindestens mindestens zwei Regeln: (1) Behandlung der Kleinbuchstaben 'a' und 'b' als gleichwertig die Kodierungen vergleichen. Wir nennen dies eine case-insensitive Kollation. Es ist eine etwas komplexer als eine binäre Sortierung.

Im wirklichen Leben haben die meisten Zeichensätze viele Zeichen: nicht nur 'A' und 'B' sondern ganze Alphabete, manchmal mehrere Alphabete oder östliche Schriftsysteme oder östliche Schriftsysteme mit Tausenden von Zeichen, zusammen mit vielen Sonderzeichen und Interpunktionszeichen. Auch im wirklichen Leben, haben die meisten Sortierungen viele Regeln: nicht nur nur Groß- und Kleinschreibung, sondern auch Akzent-Unempfindlichkeit (ein "Akzent" ist ein Zeichen, das an ein Zeichen angehängt wird, wie in deutschen 'ö') und Mehrfach-Zeichen Zuordnungen (z. B. die Regel, dass 'ö' = 'OE' in einer der beiden deutschen Kollationen).

220voto

mat Punkte 12303

A Zeichenkodierung ist eine Möglichkeit, Zeichen so zu kodieren, dass sie in den Speicher passen. Das heißt, wenn der Zeichensatz ISO-8859-15 ist, wird das Euro-Symbol € als 0xa4 kodiert, und in UTF-8 wird es 0xe282ac sein.

En Kollation ist, wie man Zeichen vergleicht, in latein9 gibt es Buchstaben als e é è ê f nach ihrer binären Darstellung sortiert, ergibt sich e f é ê è Wenn die Sortierreihenfolge jedoch z. B. auf Französisch eingestellt ist, werden sie in der Reihenfolge angezeigt, in der Sie sie erwartet haben, d. h. alle e é è ê gleich sind, und dann f .

22voto

erickson Punkte 256579

Ein Zeichensatz ist eine Teilmenge aller geschriebenen Glyphen. Eine Zeichenkodierung gibt an, wie diese Zeichen auf numerische Werte abgebildet werden. Einige Zeichenkodierungen, wie UTF-8 und UTF-16, können jedes Zeichen des universellen Zeichensatzes kodieren. Andere, wie US-ASCII oder ISO-8859-1, können nur eine kleine Teilmenge kodieren, da sie 7 bzw. 8 Bits pro Zeichen verwenden. Da viele Normen sowohl einen Zeichensatz als auch eine Zeichenkodierung vorgeben, wird der Begriff "Zeichensatz" oft frei durch "Zeichenkodierung" ersetzt.

Eine Sortierung umfasst Regeln, die angeben, wie Zeichen für die Sortierung verglichen werden können. Sortierregeln können landesspezifisch sein: Die richtige Reihenfolge zweier Zeichen variiert von Sprache zu Sprache.

Die Wahl des Zeichensatzes und der Kollationierung hängt davon ab, ob Ihre Anwendung internationalisiert ist oder nicht. Wenn nicht, auf welches Gebietsschema zielen Sie ab?

Bei der Wahl des Zeichensatzes, den Sie unterstützen wollen, müssen Sie Ihre Anwendung berücksichtigen. Wenn Sie benutzerseitige Eingaben speichern, kann es schwierig sein, alle Sprachumgebungen vorauszusehen, in denen Ihre Software letztendlich verwendet werden wird. Um sie alle zu unterstützen, ist es vielleicht am besten, von Anfang an das UCS (Unicode) zu unterstützen. Dies hat jedoch seinen Preis: Viele westeuropäische Zeichen benötigen nun zwei Bytes Speicherplatz pro Zeichen statt einem.

Die Wahl der richtigen Sortierreihenfolge kann die Leistung verbessern, wenn Ihre Datenbank die Sortierreihenfolge verwendet, um einen Index zu erstellen, und diesen Index später verwendet, um sortierte Ergebnisse zu liefern. Da die Sortierregeln jedoch oft landesspezifisch sind, ist dieser Index wertlos, wenn Sie die Ergebnisse nach den Regeln eines anderen Gebietsschemas sortieren müssen.

4voto

simhumileco Punkte 26451

Ich empfehle die Verwendung von utf8mb4_unicode_ci die auf dem Unicode-Standard für die Sortierung und den Vergleich basiert, der eine genaue Sortierung in einer Vielzahl von Sprachen ermöglicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X