Was bedeutet Kollatierung?


138

Was bedeutet Kollatierung in SQL und was macht es?


2
@gbn: Übrigens funktioniert die Sortierung sowohl in MSSQL als auch in MySQL sehr ähnlich.
Piskvor verließ das Gebäude


@Piskvor: Außer, dass einige der mySql-Kollatierungsoptionen (z. B. UTF8) in MSSQL nicht verfügbar sind: msdn.microsoft.com/en-us/library/ms144250.aspx
CB

@CB: Das nicht leugnen; Die Ähnlichkeit geht tiefer als bei (nicht) unterstützten Zeichensätzen.
Piskvor verließ das Gebäude

Antworten:


60

Die Sortierung kann einfach als Sortierreihenfolge betrachtet werden.

Auf Englisch (und es ist ein seltsamer Cousin, Amerikaner) kann die Sortierung eine ziemlich einfache Angelegenheit sein, die aus der Bestellung nach dem ASCII-Code besteht.

Sobald Sie in diese seltsamen europäischen Sprachen mit all ihren Akzenten und anderen Merkmalen geraten, ändert sich die Sortierung. Obwohl die verschiedenen Formen mit Akzent aan unterschiedlichen Codepunkten vorhanden sein können, müssen sie möglicherweise alle so sortiert werden, als wären sie der gleiche Buchstabe.


4
Unterschiedliche Akzente in der Regel bedeuten , dass sie sortiert werden müssen , als ob sie unterschiedliche Buchstaben - zum Beispiel e, ë, é, ě, und è könnte verschiedene Buchstaben für die Zwecke der Bestellung sein (aber möglicherweise den gleichen Brief bei der Suche, verdammt diese verrückten Europäer;)).
Piskvor verließ das Gebäude

1
@Piskvor: Zeigen Koordinaten in Ihren Informationen nicht auf ein bestimmtes Land, das ein Alphabet mit 42Buchstaben verwendet, 15von denen sie diakritisch sind?
Quassnoi

4
@ Quassnoi: Na ja und? Bedeute ich irgendwo, dass ich nicht verrückt bin? ; o) (obwohl Gott sei Dank für Unicode, wäre ich total verrückt, wenn ich noch mit landesspezifischen
Zeichensätzen arbeiten

3
@Piskvor: Entschuldigung, Entschuldigung, du bist vollkommen verrückt! :)
Quassnoi

Ist es nur für sort oder auch für where st= 'aaa'?
Royi Namir

42

Neben den „Buchstaben mit Akzenten sortiert werden anders als unbetonter ones“ in einigen westeuropäischen Sprachen, müssen Sie die berücksichtigen Gruppen von Buchstaben, die unterschiedlich manchmal sortiert werden, auch.

Traditionell wurde "ch" auf Spanisch als eigenständiger Buchstabe betrachtet, genau wie "ll" (beide repräsentieren ein einzelnes Phonem), sodass eine Liste wie folgt sortiert wurde:

  • Caballo
  • cinco
  • Coche
  • charco
  • Schokolade
  • Chueco
  • Dado
  • (...)
  • lámpara
  • luego
  • llanta
  • lluvia
  • Madera

Bekanntmachung alle Wörter mit einzelnen Ausgangs c gehen zusammen, mit Ausnahme Wörter , beginnend mit ch , die gehen nach ihnen, das gleiche mit ll Worten Anfangsbuchstaben , die mit einem einzigen Start nach allen Wörtern gehen l . Dies ist die Reihenfolge, die Sie in alten Wörterbüchern und Enzyklopädien sehen, manchmal sogar heute noch von sehr konservativen Organisationen.

Die Royal Academy of the Language hat dies geändert, um es Spanisch zu erleichtern, sich in der Computerwelt zurechtzufinden. Trotzdem wird ñ immer noch als ein anderer Buchstabe als n betrachtet und geht danach und vor o . Das ist also eine korrekt geordnete Liste:

  • Namibia
  • número
  • ñandú
  • ñú
  • obra
  • ojo

Durch Auswahl der richtigen Sortierung erledigen Sie das alles automatisch für Sie :-)


OK, eine Sortierung ist also sehr nützlich für die korrekte Sortierung, aber ist sie immer noch nützlich für Vergleiche? Zum Beispiel möchte ich, dass 'ñandú' und 'nandu' aus praktischen Gründen gleich sind ... Könnte mir der Kollatierungsmechanismus bei dieser Aufgabe helfen?
CB

@CB: Wenn Sie so etwas wie die Auswahl aller Zeilen meinen, bei denen der Wert einer Spalte gleich 'Aéreo' ist und SQL S. Zeilen mit 'aereo', 'aereó', 'AerEO' und dergleichen zurückgibt - ja, eine bestimmte Sortierung nur für a festlegen Abfrage kann das tun. Sie haben jedoch Leistungsprobleme, wenn sich diese Sortierung stark von der nativen der Datenbank unterscheidet. Und wenn Sie temporäre Tabellen verwenden, müssen Sie auch die Kollatierung von tempdb verfolgen ... Aber Sie können es tun.
Joe Pineda

Könnten Sie in diesem Fall bitte etwas mehr erklären? Wäre die einfache Abfrage "SELECT word FROM test WHERE word LIKE 'nandu'" dazu in der Lage? Und welche Zusammenstellung sollte ich verwenden, damit es funktioniert? (Beachten Sie, dass ich über diakritische Zeichen und nicht nur Akzente besorgt bin ...)
CB

2
@CB werfen Sie einen Blick auf den Teil 'AI' oder 'AS' der Kollatierung (Accent Insensitive und Accent Sensitive).
Dustin Kendall

14

Regeln zum Vergleichen und Sortieren von Zeichenfolgen: Buchstabenreihenfolge; ob der Fall wichtig ist, ob diakritische Punkte wichtig sind usw.

Wenn Sie beispielsweise möchten, dass alle Buchstaben unterschiedlich sind (z. B. wenn Sie Dateinamen speichern UNIX), verwenden Sie die UTF8_BINSortierung:

SELECT  'A' COLLATE UTF8_BIN = 'a' COLLATE UTF8_BIN

---
0

Wenn Sie Unterschiede zwischen Groß- und Kleinschreibung und diakritischen Zeichen ignorieren möchten (z. B. für eine Suchmaschine), verwenden Sie die UTF8_GENERAL_CISortierung:

SELECT  'A' COLLATE UTF8_GENERAL_CI = 'ä' COLLATE UTF8_GENERAL_CI

---
1

Wie Sie sehen können, berücksichtigt diese Sortierung (Vergleichsregel) AGroß- und Kleinschreibung ädenselben Buchstaben und ignoriert dabei Unterschiede zwischen Groß- und Kleinschreibung und diakritischen Zeichen.


10

Die Sortierung definiert, wie Sie Zeichenfolgenwerte sortieren und vergleichen

Zum Beispiel wird definiert, wie damit umgegangen werden soll

  • Akzente ( äàaetc)
  • case ( Aa)
  • der Sprachkontext:
    • In einer französischen Zusammenstellung cote < côte < coté < côté.
    • In der SQL Server Latin1-Standardeinstellung ist cote < coté < côte < côté
  • ASCII-Sortierungen (eine binäre Sortierung)

5

Sortierung bedeutet, den Zeichen in einem Alphabet eine bestimmte Reihenfolge zuzuweisen, z. B. ASCII oder Unicode usw.

Angenommen, Ihr Alphabet enthält 3 Zeichen - {A, B, C}. Sie können einige Beispielkollatierungen dafür definieren, indem Sie den Zeichen ganzzahlige Werte zuweisen

  1. Beispiel 1 = {A = 1, B = 2, C = 3}
  2. Beispiel 2 = {C = 1, B = 2, A = 3}
  3. Beispiel 3 = {B = 1, C = 2, A = 3}

In der Tat können Sie n definieren! Kollatierungen auf einem Alphabet der Größe n. In einer solchen Reihenfolge verwenden verschiedene Sortierroutinen wie LSD / MSD-Zeichenfolgensortierungen diese zum Sortieren von Zeichenfolgen.


3

Die Sortierung bestimmt, wie Ihre Daten sortiert und verglichen werden. Es ist sehr oft wichtig im Hinblick auf die Internazionalisierung, z. B. wie sortiert man japanische Kanji?

Wenn Sie Google Collation und SQL Server verwenden, finden Sie zahlreiche Artikel, in denen dies diskutiert wird!


3

Aus diesem Artikel wird Bezug genommen: Eine Sortierung ist ein Satz von Regeln zum Vergleichen von Zeichen in einem Zeichensatz. Es wurde auch für das Sortieren von Zeichen entschieden, und die richtige Reihenfolge von zwei Zeichen variiert von Sprache zu Sprache. Eine Kollatierung verglich zwei Zeichenfolgen wie, wenn ein Wort größer als ein anderes ist, und sortierte entsprechend.

Wenn Sie den Zeichensatz "latin1" verwenden, können Sie die Sortierung "latin1_swedish_ci" verwenden.

Sie müssen die richtige Sortierung auswählen, da eine falsche Sortierung die Datenbankleistung beeinträchtigen kann.


2

http://en.wikipedia.org/wiki/Collation

Die Zusammenstellung ist die Zusammenstellung schriftlicher Informationen zu einer Standardbestellung. (...) Ein Kollatierungsalgorithmus wie der Unicode-Kollatierungsalgorithmus definiert eine Reihenfolge, indem zwei gegebene Zeichenketten verglichen und entschieden werden, welche vor der anderen stehen sollen.



1
Dieser Artikel erklärt wirklich alles.
Joe Pineda

3
@ Joe Pineda. Vielleicht erklärt es wirklich alles, aber will der Leser alles wissen? Oder ist es möglich, dass der Leser einfach eine präzise, ​​zuverlässige Antwort wünscht, die die grundlegendsten und am häufigsten verwendeten Elemente und Funktionen der Kollatierung abdeckt, damit er sie schnell lesen und die Arbeit an der Aufgabe, Aufgabe oder dem Projekt fortsetzen kann, die die Frage aufgeworfen hat? anfangen mit?
cfwschmidt

2
@TJCrowder Ich schätze die Ironie in diesem

1

Bei der Sortierung entscheidet SQL Server, wie Text sortiert und verglichen wird.

Siehe MSDN .

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.