Question

Je peux lire la documentation sur MySQL et c’est très clair. Mais comment décider quel jeu de caractères utiliser? Sur quelles données le classement a-t-il un effet?

Je demande une explication des deux et comment les choisir.

Était-ce utile?

La solution

À partir de MySQL docs :

  

Un jeu de caractères est un ensemble de symboles.   et des encodages. Un classement est un ensemble de   règles de comparaison des caractères dans un   jeu de caractères. Faisons le   distinction claire avec un exemple de   un jeu de caractères imaginaires.

     

Supposons que nous ayons un alphabet avec   quatre lettres: "A", "B", "a", "b". nous   attribuez à chaque lettre un chiffre: 'A' = 0,   'B' = 1, 'a' = 2, 'b' = 3. La lettre   'A' est un symbole, le nombre 0 est le   codage pour 'A', et la combinaison   des quatre lettres et leur   encodings est un jeu de caractères.

     

Maintenant, supposons que nous voulions comparer   deux valeurs de chaîne, 'A' et 'B'. le   moyen le plus simple de le faire est de regarder   les encodages: 0 pour 'A' et 1 pour   'B'. Parce que 0 est inférieur à 1, on dit   "A" est inférieur à "B". Maintenant, qu'est-ce que nous avons   vient de faire est d'appliquer une collation à notre   jeu de caractères. La collation est un ensemble   de règles (une seule règle dans ce cas):   " comparer les encodages. " Nous appelons cela   le plus simple de tous les collations possibles a   classement binaire.

     

Mais si nous voulons dire que le   les lettres minuscules et majuscules sont   équivalent? Ensuite, nous aurions à   moins deux règles: (1) traiter les   lettres minuscules 'a' et 'b' comme   équivalent à 'A' et 'B'; (2) alors   comparer les encodages. Nous appelons cela un   classement insensible à la casse. C'est un   un peu plus complexe qu'un binaire   classement.

     

Dans la vie réelle, la plupart des jeux de caractères ont   beaucoup de caractères: pas seulement 'A' et 'B'   mais des alphabets entiers, parfois   alphabets multiples ou écriture orientale   systèmes avec des milliers de caractères,   avec de nombreux symboles spéciaux et   signe de ponctuation. Aussi dans la vraie vie,   la plupart des collations ont de nombreuses règles: non   juste insensibilité à la casse, mais aussi   insensibilité aux accents (un "accent" est un   marque attachée à un personnage comme dans   Allemand '& # 246;') et plusieurs caractères   mappages (tels que la règle selon laquelle '& # 246;' =   'OE' dans l'un des deux allemand   classements).

Autres conseils

Un codage de caractères est un moyen de coder les caractères de manière à ce qu'ils tiennent dans la mémoire. En d’autres termes, si le jeu de caractères est ISO-8859-15, le symbole de l’euro, & # 8364 ;, sera codé en tant que 0xa4 et, dans UTF-8, il s’agira de 0xe282ac.

Le classement est comment comparer des caractères. En latin9, il existe des lettres sous la forme e & # 233; & # 232; & # 234; f , si trié par leur représentation binaire, il ira e f & # 233; & # 234; & # 232; mais si le classement est défini, par exemple, sur Français, vous les aurez dans l'ordre que vous pensiez être, ce qui correspond à e & # 233; & # 232; & # 234; sont égaux, puis f .

Un jeu de caractères est un sous-ensemble de tous les glyphes écrits. Un codage de caractères spécifie comment ces caractères sont mappés à des valeurs numériques. Certains codages de caractères, tels que UTF-8 et UTF-16, peuvent coder n’importe quel caractère du jeu de caractères universel. D'autres, comme US-ASCII ou ISO-8859-1, ne peuvent coder qu'un petit sous-ensemble, car ils utilisent respectivement 7 et 8 bits par caractère. Étant donné que de nombreuses normes spécifient à la fois un jeu de caractères et un codage de caractères, le terme "jeu de caractères" est souvent substitué librement à "codage de caractères".

Un classement comprend des règles qui spécifient comment les caractères peuvent être comparés pour le tri. Les règles de classement peuvent être spécifiques à l'environnement local: l'ordre correct de deux caractères varie d'une langue à l'autre.

Le choix d'un jeu de caractères et du classement dépend de l'internationalisation de votre application. Si non, quels sont les paramètres régionaux que vous ciblez?

Pour choisir le jeu de caractères que vous souhaitez prendre en charge, vous devez prendre en compte votre application. Si vous stockez des entrées fournies par l'utilisateur, il peut être difficile de prévoir tous les paramètres régionaux dans lesquels votre logiciel sera éventuellement utilisé. Pour les prendre tous en charge, il serait peut-être préférable de prendre en charge UCS (Unicode) dès le début. Cependant, cela a un coût; de nombreux caractères d'Europe occidentale nécessiteront désormais deux octets de stockage par caractère au lieu d'un.

Le choix du classement approprié peut améliorer les performances si votre base de données utilise ce classement pour créer un index, puis utilise cet index pour fournir des résultats triés. Toutefois, les règles de classement étant souvent spécifiques à l'environnement local, cet index n'aura aucune valeur si vous devez trier les résultats en fonction des règles d'un autre environnement local.

Je suggère d'utiliser utf8mb4_unicode_ci , basé sur la norme Unicode pour le tri et la comparaison, qui effectue un tri précis dans un très grand nombre de langues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top