2008-12-04 5 views

Répondre

424

De MySQL docs:

Un personnage défini est un ensemble de symboles et codages. Un collation est un ensemble de règles pour la comparaison de caractères dans un jeu de caractères . Faisons la distinction claire avec un exemple de un jeu de caractères imaginaire. Supposons que nous ayons un alphabet avec quatre lettres: «A», «B», «a», «b». Nous donner à chaque lettre un nombre: 'A' = 0, 'B' = 1, 'a' = 2, 'b' = 3. La lettre 'A' est un symbole, le 0 est le pour 'A', et la combinaison des quatre lettres et leurs codages est un jeu de caractères. Supposons maintenant que nous souhaitons comparer deux valeurs de chaîne, 'A' et 'B'. La façon la plus simple de le faire est de regarder les codages: 0 pour 'A' et 1 pour 'B'. Parce que 0 est inférieur à 1, nous disons 'A' est inférieur à 'B'. Maintenant, ce que nous venons de faire est d'appliquer un classement à notre jeu de caractères . Le classement 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 un collation binaire. Mais si nous voulons dire que les minuscules et majuscules sont équivalent? Ensuite, nous aurions à au moins deux règles: (1) traiter les lettres minuscules «a» et «b» comme équivalent à «A» et «B»; (2) puis comparer les codages. Nous appelons cela une collation insensible à la casse . C'est un un peu plus complexe qu'un binaire collation.

Dans la vraie vie, la plupart des jeux de caractères ont beaucoup de caractères: non seulement « A » et « B » mais alphabets entiers, parfois plusieurs alphabets ou écriture orientale systèmes avec des milliers de personnages, ainsi que de nombreux symboles spéciaux et signes de ponctuation. Dans la vraie vie, la plupart des classements ont beaucoup de règles: pas manque de sensibilité juste cas, mais aussi manque de sensibilité d'accent (un « accent » est une marque attachée à un personnage comme dans allemand « ö ») et de multiples caractères correspondances (comme la règle selon laquelle 'ö' = 'OE' dans l'une des deux classements allemands ).

170

Un character encoding est un moyen de coder les caractères afin qu'ils tiennent dans la mémoire.Autrement dit, si le jeu de caractères est ISO-8859-15, le symbole de l'euro, €, sera codé en tant que 0xa4, et en UTF-8, il sera 0xe282ac.

Le collation est comment comparer les caractères, dans latin9, il y a des lettres que e é è ê f, si triés par leur représentation binaire, il ira e f é ê è mais si le classement est défini, par exemple, le français, vous aurez les dans l'ordre que vous pensiez qu'ils seraient, qui sont tous égaux, puis f.

+4

Il est important de noter qu'il peut y avoir plusieurs classements différents pour un jeu de caractères unique. Celui qui est "juste" dépend de la sémantique du texte qui est normalement déterminée par la langue dans laquelle il est écrit. – Phil

19

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 en valeurs numériques. Certains encodages de caractères, comme UTF-8 et UTF-16, peuvent encoder n'importe quel caractère dans le jeu de caractères universel. D'autres, comme US-ASCII ou ISO-8859-1, ne peuvent coder qu'un petit sous-ensemble, puisqu'ils utilisent respectivement 7 et 8 bits par caractère. Du fait 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 remplacé par "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 aux paramètres régionaux: le bon ordre de deux caractères varie d'une langue à l'autre.

Le choix d'un jeu de caractères et le classement dépendent de l'internationalisation de votre application. Si non, quelle région ciblez-vous?

Afin de choisir le jeu de caractères que vous voulez soutenir, vous devez considérer votre application. Si vous stockez une entrée fournie 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 supporter tous, il vaudrait mieux soutenir UCS (Unicode) dès le départ. Cependant, il y a un coût à cela; 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 correct peut améliorer les performances si votre base de données utilise le classement pour créer un index et utilise ultérieurement cet index pour fournir des résultats triés. Toutefois, étant donné que les règles de classement sont souvent spécifiques aux paramètres régionaux, cet index sera inutile si vous devez trier les résultats en fonction des règles d'un autre environnement local.

2

Je suggère d'utiliser utf8mb4_unicode_ci, qui est basé sur la norme Unicode pour le tri et la comparaison, qui trie avec précision dans un très large éventail de langues.

+1

de l'OP: "Je demande une explication des deux et comment les choisir" –

Questions connexes