2008-12-04 11 views

Antwort

424

Von MySQL docs:

Ein Charakter Satz ist ein Satz von Symbolen und Kodierungen. A Kollation ist eine Reihe von Regeln zum Vergleichen von Zeichen in einem Zeichensatz. Lassen Sie uns die Unterscheidung mit einem Beispiel von einen imaginären Zeichensatz deutlich machen.

Angenommen, wir haben ein Alphabet mit vier Buchstaben: 'A', 'B', 'a', 'b'. Wir geben Sie jedem Buchstaben eine Nummer: 'A' = 0, 'B' = 1, 'a' = 2, 'b' = 3. Der Buchstabe 'A' ist ein Symbol, die Zahl 0 ist die Codierung für 'A', und die Kombination aller vier Buchstaben und ihre Kodierungen ist ein Zeichensatz.

Angenommen, wir möchten zwei Zeichenfolgenwerte 'A' und 'B' vergleichen. Die einfachste Art, dies zu tun ist die Kodierungen zu suchen: 0 für 'A' und 1 für 'B'. Weil 0 kleiner als 1 ist, sagen wir 'A' ist kleiner als 'B'. Nun, was wir gerade getan haben, wenden Sie eine Kollatierung auf unseren Zeichensatz an. Die Kollatierung ist eine Menge der Regeln (nur eine Regel in diesem Fall): "Vergleichen Sie die Kodierungen." Wir nennen dies einfachste aller möglichen Kollationen eine Binärkollation.

Aber was, wenn wir sagen wollen, dass die Groß- und Kleinbuchstaben gleichwertig sind? Dann hätten wir unter mindestens zwei Regeln: (1) Behandle die Kleinbuchstaben "a" und "b" als äquivalent zu "A" und "B"; (2) dann Vergleichen Sie die Kodierungen. Wir nennen dies eine case-insensitive Sortierung. Es ist ein wenig 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 mehr Alphabete oder östliche Schreiben Systeme mit Tausenden von Zeichen, zusammen mit vielen Sonderzeichen und Interpunktionszeichen. Auch im wirklichen Leben, meisten Sortierungen viele Regeln haben: nicht nur Unempfindlichkeit Fall, sondern auch Akzent Unempfindlichkeit (ein „Akzent“ ist ein Zeichen auf ein Zeichen angebracht, wie in Deutsch ‚ö‘) und mehrere Zeichen Mappings (wie die Regel, dass 'ö' = 'OE' in einer der beiden deutschen Kollationen).

170

Ein character encoding ist eine Möglichkeit, Zeichen so zu codieren, 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 als 0xe282ac.

Die collation ist, 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, müssen Sie sie haben in der Reihenfolge, die Sie dachten, sie wären, die alle e é è ê sind gleich, und dann f.

+4

Wichtig zu beachten, dass es für einen einzelnen Zeichensatz viele verschiedene Sortierungen geben kann. Der eine, der "richtig" ist, hängt von der Semantik des Textes ab, der normalerweise durch die Sprache bestimmt wird, in der er geschrieben ist. – Phil

19

Ein Zeichensatz ist eine Teilmenge aller geschriebenen Zeichen. Eine Zeichencodierung gibt an, wie diese Zeichen numerischen Werten zugeordnet werden. Einige Zeichenkodierungen, wie UTF-8 und UTF-16, können jedes 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 Zeichencodierung spezifizieren, wird der Begriff "Zeichensatz" oft frei für "Zeichencodierung" substituiert.

Eine Sortierung umfasst Regeln, die angeben, wie Zeichen zum Sortieren verglichen werden können. Sortierregeln können länderspezifisch sein: Die richtige Reihenfolge von zwei Zeichen ist von Sprache zu Sprache unterschiedlich.

Die Auswahl eines Zeichensatzes und einer Sortierung hängt davon ab, ob Ihre Anwendung internationalisiert ist oder nicht. Falls nicht, auf welches Gebietsschema zielen Sie?

Um auszuwählen, welchen Zeichensatz Sie unterstützen möchten, müssen Sie Ihre Anwendung berücksichtigen. Wenn Sie vom Benutzer bereitgestellte Eingaben speichern, kann es schwierig sein, alle Ländereinstellungen vorauszusehen, in denen Ihre Software eventuell verwendet wird. Um sie alle zu unterstützen, ist es am besten, das UCS (Unicode) von Anfang an zu unterstützen. Dies verursacht jedoch Kosten. Viele westeuropäische Zeichen benötigen jetzt zwei Byte Speicherplatz pro Zeichen anstelle von einem.

Die Auswahl der richtigen Sortierung kann die Leistung verbessern, wenn Ihre Datenbank die Sortierung verwendet, um einen Index zu erstellen, und später diesen Index verwendet, um sortierte Ergebnisse bereitzustellen. Da Sortierregeln jedoch häufig länderspezifisch sind, ist dieser Index wertlos, wenn Sie Ergebnisse nach den Regeln eines anderen Gebietsschemas sortieren müssen.

2

Ich empfehle die Verwendung utf8mb4_unicode_ci, die auf dem Unicode-Standard für das Sortieren und Vergleichen basiert, die genau in einer Vielzahl von Sprachen sortiert.

+1

aus dem OP: "Ich frage nach einer Erklärung der beiden und wie man sie wählt" –