Oracle
 sql >> Base de données >  >> RDS >> Oracle

Je ne comprends pas Collation ? (Mysql, SGBDR, jeux de caractères)

Le point principal d'un classement de base de données est de déterminer comment les données sont triées et comparées.

Respect de la casse des comparaisons de chaînes

SELECT "New York" = "NEW YORK";` 

renverra true pour un classement insensible à la casse ; false pour une sensible à la casse.

Quelle collation fait qui peut être indiquée par le _ci et _cs suffixe dans le nom de la collation. _bin les classements effectuent des comparaisons binaires (les chaînes doivent être identiques à 100 %).

Comparaison des trémas/caractères accentués

le classement détermine également si les caractères accentués sont traités comme leurs équivalents en base latine dans les comparaisons de chaînes.

SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

renverra true dans le premier cas ; faux dans ce dernier. Vous devrez lire la description de chaque classement pour savoir lequel est lequel.

Tri de chaînes

Le classement influence la manière dont les chaînes sont triées.

Par exemple,

  • Trémas Ä Ö Ü sont à la fin de l'alphabet dans l'alphabet finnois/suédois latin1_swedish_ci

  • ils sont traités comme A O U en allemand tri DIN-1 (latin_german1_ci )

  • et comme AE OE UE en allemand tri DIN-2 (latin_german2_ci ). (tri "répertoire")

  • En latin1_spanish_ci , "ñ" (n-tilde) est une lettre séparée entre "n" et "o".

Ces règles entraîneront des ordres de tri différents lorsque des caractères non latins sont utilisés.

Utilisation des classements lors de l'exécution

Vous devez choisir un classement pour votre table et vos colonnes, mais si les performances ne vous dérangent pas, vous pouvez forcer les opérations de base de données dans un certain classement au moment de l'exécution en utilisant le COLLATE mot-clé.

Cela triera table par le name colonne utilisant les règles de tri allemandes DIN-2 :

SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

Utilisation de COLLATE lors de l'exécution aura des implications sur les performances, car chaque colonne doit être convertie pendant la requête. Réfléchissez donc à deux fois avant d'appliquer cela à de grands ensembles de données.

Référence MySQL :

  • Jeux de caractères et classements pris en charge par MySQL
  • Exemples de l'effet du classement
  • Problèmes de classement