2010-12-27 7 views
111

Was bedeutet Kollationierung in SQL und was macht sie?Was bedeutet Kollationierung?

+1

SQL-Server oder MySQL oder beides? – gbn

+2

@gbn: Übrigens funktioniert Kollationierung in MSSQL und MySQL sehr ähnlich. – Piskvor

+1

mögliches Duplikat von [\ [MySQL \]: Was ist Kollationsmethode?] (Http://stackoverflow.com/questions/1654077/mysql-what-is-collation-method) – outis

Antwort

46

Sortierung kann einfach als Sortierreihenfolge betrachtet werden.

In Englisch (und es ist seltsam Cousin, American), Kollation kann eine ziemlich einfache Angelegenheit, bestehend aus der Bestellung durch den ASCII-Code.

Sobald Sie in diese merkwürdigen europäischen Sprachen mit all ihren Akzenten und anderen Funktionen kommen, ändert sich die Sortierung. Zum Beispiel, obwohl die verschiedenen Formen mit Akzent a an verschiedenen Codepunkten existieren können, müssen sie alle sortiert werden, als ob sie den gleichen Buchstaben hätten.

+4

Verschiedene Akzente bedeuten normalerweise, dass sie sortiert werden müssen, als wären sie * verschiedene * Buchstaben - z. 'e',' ë', 'é',' ì', und 'è' könnten * eindeutige Buchstaben sein, um zu ordern (aber möglicherweise den gleichen Buchstaben bei der Suche, verdammt diese verrückten Europäer;)). – Piskvor

+1

@Piskvor: Gibt es keine Koordinaten in deinen Daten, die auf ein bestimmtes Land verweisen, indem du ein Alphabet mit '42' Buchstaben verwendest, von denen' 15' diakritische Zeichen haben? – Quassnoi

+4

@Quassnoi: Nun ja, und? Spreche 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 müsste) – Piskvor

1

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

Collation ist die Montage von schriftlichen Informationen in ein Standard-Reihenfolge. (...) Ein Kollationsalgorithmus wie der Unicode collation algorithm definiert eine Reihenfolge durch den Prozess des Vergleichens von zwei gegebenen Zeichenketten und die Entscheidung, welche vor die andere kommen sollte.

+9

http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

+1

Dieser Artikel erklärt wirklich alles. –

+2

@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ägnante, verlässliche Antwort wünscht, die die grundlegendsten und am häufigsten verwendeten Elemente und Funktionen der Kollatierung umfasst, so dass er sie schnell lesen kann und die Arbeit an jeder Aufgabe, Aufgabe oder jedem Projekt weiterführen kann anfangen mit? – cfwschmidt

1

Die Sortierung ist, wie SQL Server entscheidet, wie Text zu sortieren und zu vergleichen ist.

Siehe MSDN.

3

Die Sortierung legt fest, wie Ihre Daten sortiert und verglichen werden. Es ist sehr wichtig in Bezug auf Internationalisierung, z. Wie sortiert man japanische Kanji?

Wenn Sie Google Collation und SQL-Server googlen, finden Sie viele Artikel darüber zu diskutieren!

9

Regeln, die das Vergleichen und Sortieren von Strings erklären: Reihenfolge der Buchstaben; ob Fall Fragen, ob diakritische Zeichen usw. Materie

Zum Beispiel, wenn Sie alle Buchstaben wollen anders sein (sagen wir, wenn Sie die Dateinamen in UNIX speichern), verwenden Sie UTF8_BIN Sortierungs:

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

--- 
0 

Wenn Sie möchten, Fall und diakritische Zeichen Unterschiede (zum Beispiel für eine Suchmaschine), die Sie verwenden UTF8_GENERAL_CI Sortierung zu ignorieren:

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

--- 
1 

Wie Sie diese Sortierungs (Vergleichsregel) hält Kapital sehen können, A und Lowecase ä den gleichen Buchstaben, Ignorieren Fall und diakritischen Unterschiede.

6

Sortierungs definiert, wie Sie sortieren und vergleichen String-Wert

Zum Beispiel definiert es wie mit

  • Akzenten (äàa etc)
  • Fall (Aa)
  • der Sprachkontext beschäftigen :
    • In einer Französisch Sortierung, cote < côte < coté < côté.
    • Im SQL Server Latein1 standardmäßig cote < coté < côte < côté
  • ASCII Art (Binärsortierung)
35

Neben dem "Umlaute anders sortiert werden als unbetonter ones" in einigen westeuropäischen Sprachen, müssen Sie Berücksichtigen Sie die Gruppen von Buchstaben, die manchmal auch anders sortiert sind.

Traditionell in Spanisch, „ch“ wurde ein Brief in seinem eigenen Recht, das gleiche mit „ll“ betrachtet (die beide eine Einfach Phonem), so dass eine Liste wie folgt erhalten sortiert würden:

  • caballo
  • cinco
  • coche
  • charco
  • Schokolade
  • Chueco
  • Dado
  • (...)
  • lámpara
  • luego
  • llanta
  • lluvia
  • madera

Hinweis alle Worte mit einzelnen c zusammen gehen beginnen, mit Ausnahme Wörter beginnend mit ch welche gehen nach sie, das gleiche mit ll Anfangsbuchstaben Worte, die nach allen Wörtern gehen mit einem einzigen l beginnen. Dies ist die Reihenfolge, die Sie in alten Wörterbüchern und Enzyklopädien sehen werden, manchmal sogar heute von sehr konservativen Organisationen.

Die Royal Academy der Sprache änderte sich dies es einfacher zu machen für Spanisch in der Computerwelt untergebracht werden. Dennoch ist ñ noch einen anderen Buchstaben betrachtet als n und geht nach es, und vor o.Das ist also eine richtig geordnete Liste:

  • Namibia
  • número
  • Nandu
  • Ñú
  • obra
  • ojo

Durch die richtige Sortierung der Auswahl erhalten Sie alle das erledigt für dich automatisch :-)

+0

OK, so eine Kollatierung ist sehr nützlich für die korrekte Sortierung, aber ist es immer noch nützlich für Vergleiche? Zum Beispiel möchte ich, dass 'ñandú' und 'nandu' aus praktischen Gründen als gleichwertig erscheinen ... Könnte der Kollationierungsmechanismus mir bei dieser Aufgabe helfen? –

+0

@CB: Wenn Sie so etwas wie das Auswählen aller Zeilen meinen, wo der Wert einer Spalte gleich 'Aéreo' ist und SQL S Zeilen mit 'aereo', 'aereó', 'AerEO' und ähnlichem zurückgibt - ja, nur eine bestimmte Sortierung einstellen Eine Abfrage kann das tun. Sie haben jedoch Leistungsprobleme, wenn sich diese Kollatierung sehr von der systemeigenen unterscheidet. Und wenn Sie temporäre Tabellen verwenden, müssen Sie auch die Kollation von tempdb verfolgen ... Aber Sie können es tun. –

+0

In diesem Fall, könnten Sie bitte ein bisschen mehr erklären? Insbesondere, würde die einfache Abfrage "SELECT Wort FROM Test WHERE Wort LIKE 'nandu'" das können? Und welche Kollatierung sollte ich verwenden, damit es funktioniert? (Beachten Sie, dass ich über diakritische Zeichen und nicht nur über Akzente besorgt bin ...) –

4

Sortieren bedeutet, den Zeichen eines Alphabets eine bestimmte Reihenfolge zu geben, z. B. ASCII oder Unicode usw.

Angenommen, Sie haben 3 Zeichen in Ihrem Alphabet - {A, B, C}. Sie können einige Beispiel Sortierungen für ihn definieren durch ganzzahlige Werte zu den Zeichen 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}

Als Tatsächlich kann definiert werden n! Kollatierungen auf einem Alphabet der Größe n. Bei einer solchen Reihenfolge verwenden unterschiedliche Sortierroutinen wie LSD/MSD-String-Sortierungen diese zum Sortieren von Strings.

3

Reference is taken from this Article: Eine Kollatierung ist ein Satz von Regeln zum Vergleichen von Zeichen in einem Zeichensatz. Es hat auch für die Sortierung von Zeichen entschieden und die richtige Reihenfolge von zwei Zeichen variiert von Sprache zu Sprache. Eine Sortierung verglichen zwei Strings wie, wenn ein Wort größer als ein anderes ist, und sortieren Sie entsprechend.

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

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