Was ist der Unterschied zwischen Kollatierung und Zeichensatz?


24

Ich habe eine allgemeine Frage zu Datenbanken. Normalerweise verwenden wir den Begriff Kollatierung bei Datenbanken. Ich würde gerne wissen, wie es sich vom Zeichensatz unterscheidet. Ich denke, Kollatierung ist eine Teilmenge des Zeichensatzes. Wenn dies zutrifft, welchen Zweck hat die Mehrfachsortierung unter einem Zeichensatz?


Antworten:


27

Zeichensätze ist eine Liste von Symbolen. Wenn Sie ASCII mit latin1 vergleichen , können Sie mit latin1 alle amerikanischen Wörter schreiben, da latin1 alle ASCII- Zeichen enthält , die ausreichen, um ein englisches Wort zu schreiben. Im Gegenteil, mit ASCII können Sie nicht alle Wörter westeuropäischer spezifischer Sprachen schreiben, da beispielsweise Zeichen wie 'À', 'ë', 'õ', 'Ñ' fehlen.

Bei der Sortierung geht es um den Vergleich zwischen Zeichen. Es definiert eine Reihe von Regeln zum Vergleichen von Zeichen eines Zeichensatzes.

In MySQL beziehen sich Kollatierungen häufig auf eine Sprache (z. B. 'latin1_swedish_ci', 'latin1_german1_ci' usw.). Wenn Sie eine Auswahlabfrage bestellen, wird ein Wort, das mit 'ö' beginnt, in einigen Sprachen (mit einigen Kollatierungen) zwischen zwei Wörtern platziert, die mit 'o' und 'p' beginnen. Bei einer anderen Sortierung kann dieses Zeichen jedoch vollständig am Ende platziert werden, wodurch sich die resultierende Auswahl unterscheidet.


Danke, es ist fast klar. Ich denke, die Auswahl der Kollatierung ist ein ernstes Problem bei der Planung einer mehrsprachigen Site? Wenn die Kollatierung beispielsweise "latin1_swedish_ci" lautet, erhalte ich beim Umgang mit Unicode-Sprachen kein erwartetes Ergebnis.
Shameer

1
Ich würde vorschlagen, dass Sie sich für Unicode entscheiden, da Sie sonst irgendwann Probleme haben (zum Beispiel asiatische Sprachen). Die Sortierung hängt von der Sprache des Benutzers ab. Dies ist etwas, mit dem Sie vorsichtig sein müssen, wenn Sie ein mehrsprachiges Tool haben möchten.
Deadalnix

6

Wie die vorherige Antwort zeigt, ist der Zeichensatz eine Reihe von Zeichen (Buchstaben, Zahlen, Ideogramme usw.), die einer Zahl zugeordnet sind. Um sie sehen zu können, müssen Sie die Schrift haben (die kleinen "Bilder", die wir lesen). Sie waren bei der Verwendung von LatinX wichtig, da für jedes X dieselbe Nummer (Byte) auf ein anderes Zeichen verweisen kann.

Heutzutage ist es wichtiger, die Codierung auszuwählen: Der Standard ist UTF-8, die erfolgreichste Darstellung von Unicode (kompatibel mit ASCII, aber so flexibel, dass alle Sprachen, sogar Chinesisch und Japanisch, einbezogen werden können) und der W3C-Standard. Mit anderen Worten, es enthält alle Zeichensätze.

Kollation: Dies ist ein altmodisches Wort, abgeleitet vom Lateinischen. Es bedeutet: Vergleichen Sie eine Kopie (Manuskript) mit dem Original, um Unterschiede (Fehler oder Änderungen) festzustellen. Früher war es sehr nützlich, aber jetzt ist es fast ein Archaismus, weil unsere Dokumente und Bücher mit Computern geschrieben werden und die Kopie immer mit dem Original identisch ist. Beispiel: Auf Italienisch (abgeleitet von Latein) gibt es das Verb "collazionare", aber es steht in den Wörterbüchern und wird von niemandem verwendet.

Die Kollatierung definiert also das Verhalten von Vergleichsoperatoren: =,>, <, <=,> = ...

Natürlich werden diese Operatoren verwendet, um zu entscheiden, ob zwei Zeichenfolgen gleich sind oder ob ein Wort "größer" ist als eine andere, was sehr wichtig ist, wenn wir sortieren möchten. Die Buchstaben sind nicht für jede Sprache gleich angeordnet, daher kann ein Wort mit einer Kollatierung größer sein als ein anderes, jedoch kein anderes. Siehe [1] für ein praktisches Beispiel.

  • Die "bin" -Kollatierungen sind die strengsten: SELECT "b" = "B" => FALSE

  • Bei den "ci" -Kollatierungen wird die Groß- und Kleinschreibung nicht berücksichtigt: SELECT "b" = "B" => TRUE

  • Die "Allgemeinen" neigen dazu, einige Unterschiede zu ignorieren: SELECT "a" = "à" => TRUE

  • andere sind spezifisch für eine oder mehrere Sprachen. Beispiel "schwedisch" (Ich weiß nicht, warum Schwedisch oft eine Voreinstellung ist)

Ich bin noch auf der Suche nach einer Website, auf der das Verhalten jeder Kollation detailliert beschrieben wird. Diese Beispiele sind auf meine Erfahrung zurückzuführen.

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as


1
Schwedisch ist in einigen MySQL-Versionen immer noch die Standardeinstellung. Sein Erbe aus dem Jahr 1995, als MySQL von einem kleinen Team in Schweden erstellt wurde
Chris Wood,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.