295 votes

UTF-8: Général? Bin? Unicode?

Je suis à essayer de comprendre ce classement, je devrais être à l'aide de différents types de données. 100% du contenu, je vais être le stockage est soumis par l'utilisateur.

Ma compréhension est que je devrais être en UTF-8 IC (Insensible à la casse) au lieu de UTF-8 en Binaire. Cependant, je ne peux pas trouver une claire distinction entre UTF-8 Général de l'IC et de l'UTF-8 Unicode CI.

  1. Dois-je être le stockage de contenu soumis par l'utilisateur en UTF-8 ou UTF-8 Unicode CI colonnes?
  2. Ce type de données UTF-8 Binaire être applicable?

306voto

Sagi Points 5590

En général, utf8_general_ci est plus rapide que utf8_unicode_ci, mais moins corrects.

Voici la différence:

Pour n'importe quel jeu de caractères Unicode, les opérations effectuées à l'aide de la _general_ci classement sont plus rapides que ceux de la _unicode_ci classement. Par exemple, des comparaisons pour l'interclassement utf8_general_ci sont plus rapides, mais légèrement moins corrects, que les comparaisons pour utf8_unicode_ci. La raison pour cela est que utf8_unicode_ci prend en charge les mappages, comme l'expansion; c'est, quand un personnage se compare comme l'égalité des combinaisons des autres personnages. Par exemple, en allemand et en quelques autres langues "ß" est égal à "ss". utf8_unicode_ci prend également en charge les contractions et ignorable caractères. utf8_general_ci est un héritage de classement ne prend pas en charge les expansions, les contractions, ou ignorable caractères. Il ne peut faire qu'une comparaison directe entre les personnages.

Cité: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

Pour des explications plus détaillées, veuillez lire le post suivant de MySQL forums: http://forums.mysql.com/read.php?103,187048,188748

Comme pour utf8_bin: Les deux utf8_general_ci et utf8_unicode_ci effectuer la comparaison sensible à la casse. En contraste, utf8_bin est sensible à la casse (parmi d'autres différences), parce qu'il compare les valeurs binaires des personnages.

93voto

Alex Hepp Points 561

Vous devriez aussi être conscient du fait, qu'avec utf8_general_ci lors de l'utilisation d'un champ de type varchar comme l'unique ou le principal indice de l'insertion 2 des valeurs comme le 'a' et 'á' donnerait une erreur de clé en double.

6voto

user2635057 Points 19

Vraiment, j'ai testé enregistrer les valeurs comme 'é' et 'e' et ils provoquer une erreur de doublons sur les deux 'utf8_unicode_ci' et 'utf8_general_ci'. Vous pouvez enregistrer seulement en 'utf8_bin' assemblées de la colonne.

Et mysql docs (en http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html) suggèrent dans ses exemples set "utf8_general_ci" de classement.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X