Que signifie le classement?


138

Que signifie le classement dans SQL et que fait-il?


2
@gbn: Incidemment, le classement fonctionne de manière très similaire dans MSSQL et MySQL.
Piskvor a quitté le bâtiment


@Piskvor: Sauf que certaines des options de classement mySql (par exemple, UTF8) ne sont pas disponibles dans MSSQL: msdn.microsoft.com/en-us/library/ms144250.aspx
CB

@CB: Je ne le nie pas; la similitude va plus loin que les jeux de caractères (non) pris en charge.
Piskvor a quitté le bâtiment

Réponses:


60

Le classement peut être simplement considéré comme un ordre de tri.

En anglais (et c'est étrange cousin, américain), le classement peut être une question assez simple consistant à ordonner par le code ASCII.

Une fois que vous entrez dans ces étranges langues européennes avec tous leurs accents et autres fonctionnalités, le classement change. Par exemple, bien que les différentes formes accentuées de apuissent exister à des points de code disparates, elles peuvent toutes devoir être triées comme s'il s'agissait de la même lettre.


4
Les différents accents signifient généralement qu'ils doivent être classés comme si elles étaient différentes lettres - par exemple e, ë, é, ěet è peut - être des lettres distinctes aux fins de commande (mais peut - être la même lettre lors de la recherche, damner les Européens fous;)).
Piskvor a quitté le bâtiment

1
@Piskvor: les coordonnées dans vos informations ne pointent-elles pas vers un certain pays en utilisant un alphabet avec des 42lettres, dont 15des signes diacritiques?
Quassnoi

4
@Quassnoi: Eh bien oui, et? Est-ce que j'implique quelque part que je ne suis pas fou? ; o) (bien que Dieu merci pour Unicode, je serais complètement fou si je devais toujours travailler avec des jeux de caractères spécifiques à une nation)
Piskvor a quitté le bâtiment

3
@Piskvor: désolé, désolé, vous êtes parfaitement fou! :)
Quassnoi

Est-ce uniquement pour le tri ou aussi pour where st= 'aaa'?
Royi Namir

42

Outre les "lettres accentuées sont triées différemment des lettres non accentuées" dans certaines langues d'Europe occidentale, vous devez prendre en compte les groupes de lettres, qui sont parfois triés différemment également.

Traditionnellement, en espagnol, "ch" était considéré comme une lettre à part entière, de même que "ll" (qui représentent tous deux un seul phonème), donc une liste serait triée comme ceci:

  • caballo
  • cinco
  • coche
  • charbon de bois
  • Chocolat
  • chueco
  • dado
  • (...)
  • lámpara
  • luego
  • Llanta
  • Lluvia
  • madera

Remarquez que tous les mots commençant par un seul c vont ensemble, sauf les mots commençant par ch qui les suivent , de même que les mots commençant par ll qui vont après tous les mots commençant par un seul l . C'est l'ordre que vous verrez dans les anciens dictionnaires et encyclopédies, parfois même aujourd'hui par des organisations très conservatrices.

L'Académie Royale de la Langue a changé cela pour faciliter l'intégration de l'espagnol dans le monde informatique. Néanmoins, ñ est toujours considéré comme une lettre différente de n et va après , et avant o . Voici donc une liste correctement ordonnée:

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

En sélectionnant le bon classement, vous faites tout cela pour vous, automatiquement :-)


OK, donc un classement est assez utile pour un tri correct, mais est-il toujours utile pour les comparaisons? Par exemple, j'aimerais que «ñandú» et «nandu» soient égaux, pour des raisons pratiques ... Le mécanisme de classement pourrait-il m'aider dans cette tâche?
CB

@CB: Si vous voulez dire quelque chose comme sélectionner toutes les lignes où la valeur d'une colonne est égale à 'Aéreo' et SQL S. renvoie les lignes avec 'aereo', 'aereó', 'AerEO' et autres - oui, définir un classement spécifique pour juste un la requête peut le faire. Cependant, vous aurez des problèmes de performances si ce classement est très différent de celui natif de la base de données. Et si vous utilisez des tables temporaires, vous devez également garder une trace du classement de tempdb ... Mais vous pouvez le faire.
Joe Pineda

Dans ce cas, pourriez-vous expliquer un peu plus? En particulier, la simple requête "SELECT mot FROM test WHERE mot LIKE 'nandu'" serait-elle capable de faire cela? Et quel classement dois-je utiliser pour le faire fonctionner? (Notez que je suis préoccupé par les signes diacritiques, et pas seulement les accents ...)
CB

2
@CB jetez un œil à la partie 'AI' ou 'AS' du classement (Accent Insensitive et Accent Sensitive).
Dustin Kendall

14

Règles qui indiquent comment comparer et trier les chaînes: ordre des lettres; si le cas compte, si les signes diacritiques sont importants, etc.

Par exemple, si vous voulez que toutes les lettres soient différentes (par exemple, si vous stockez les noms de fichiers dans UNIX), vous utilisez le UTF8_BINclassement:

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

---
0

Si vous souhaitez ignorer les différences de casse et de signes diacritiques (par exemple, pour un moteur de recherche), vous utilisez le UTF8_GENERAL_CIclassement:

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

---
1

Comme vous pouvez le voir, ce classement (règle de comparaison) considère les majuscules Aet les minuscules comme äla même lettre, en ignorant les différences de casse et de diacritique.


10

Le classement définit la manière dont vous triez et comparez les valeurs de chaîne

Par exemple, il définit comment gérer

  • accents ( äàaetc.)
  • cas ( Aa)
  • le contexte linguistique:
    • Dans une collation française, cote < côte < coté < côté.
    • Dans la valeur par défaut de SQL Server Latin1, cote < coté < côte < côté
  • Tri ASCII (un classement binaire)

5

Le classement signifie attribuer un certain ordre aux caractères d'un alphabet, par exemple, ASCII ou Unicode, etc.

Supposons que vous ayez 3 caractères dans votre alphabet - {A, B, C}. Vous pouvez définir des exemples de classement pour celui-ci en attribuant des valeurs intégrales aux caractères

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

En fait, vous pouvez définir n! collations sur un Alphabet de taille n. Dans un tel ordre, différentes routines de tri comme les tris de chaînes LSD / MSD l'utilisent pour trier les chaînes.


3

Le classement détermine la manière dont vos données sont triées et comparées. C'est très souvent important en ce qui concerne l'internationalisation, par exemple comment trier les kanji japonais?

Si vous google collation et serveur SQL, vous trouverez de nombreux articles qui en parlent!


3

Référence est tirée de cet article: Un classement est un ensemble de règles permettant de comparer des caractères dans un jeu de caractères. Il a également statué sur le tri des caractères et l'ordre approprié de deux caractères varie d'une langue à l'autre. Un classement a comparé deux chaînes comme, si un mot est supérieur à un autre, et trie en conséquence.

Si vous utilisez le jeu de caractères «latin1», vous pouvez utiliser le classement «latin1_swedish_ci».

Vous devez choisir le bon classement car un mauvais classement peut affecter les performances de votre base de données.


2

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

Le classement est l'assemblage d'informations écrites dans une commande standard. (...) Un algorithme de classement tel que l' algorithme de classement Unicode définit un ordre à travers le processus de comparaison de deux chaînes de caractères données et de décision de celle qui doit précéder l'autre.



1
Cet article explique vraiment tout.
Joe Pineda

3
@Joe Pineda. Peut-être que cela explique vraiment tout, mais le lecteur veut-il tout savoir? Ou est-il possible que le lecteur veuille simplement une réponse concise et fiable qui couvre les éléments et fonctions de classement les plus fondamentaux et les plus couramment utilisés afin qu'il puisse la lire rapidement et reprendre le travail sur la tâche, la mission ou le projet qui a suscité la question commencer avec?
cfwschmidt

2
@TJCrowder J'apprécie l'ironie de ceci

1

Le classement est la manière dont le serveur SQL décide de la manière de trier et de comparer le texte.

Voir MSDN .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.