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.
- Devrais-je être le stockage de contenu soumis par l'utilisateur en UTF-8 ou UTF-8 Unicode CI colonnes?
- Quel type de données en UTF-8 Binaire être applicable?
- Note de côté, mais au lieu de
utf8
, utilisezutf8mb4
la place pour plein support UTF-8. Commentant ici parce que les réponses à cette question populaire ne traitent pas de ce. mathiasbynens.être/notes/mysql-utf8mb4 - Si vous voulez le cas de pliage, mais l'accent de sensibilité, veuillez déposer une demande à l'adresse bugs.mysql.com .
- Ou cliquez sur "Touche-Moi" sur bugs.mysql.com/bug.php?id=58797 et ajouter un commentaire.
Vous devez vous connecter pour publier un commentaire.
En général, utf8_general_ci est plus rapide que utf8_unicode_ci, mais moins corrects.
Voici la différence:
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.
show collation;
vous permet de voir le classement par défaut pour chaque jeu de caractères. 5.1 montreutf8_general_ci
en tant que par défaut pourutf8
.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.
utf8_unicode_ci
utf8_bin
compare les bits à l'aveuglette. Aucun cas de pliage, sans accent décapage.utf8_general_ci
compare un octet avec un octet. Il n'cas de pliage et accent de décapage, mais pas de 2 caractères comparisions:ij
n'est pas égalij
dans ce classement.utf8_*_ci
est un ensemble de langage de règles spécifiques, mais sinon, commeunicode_ci
. Quelques cas particuliers:Ç
,Č
,ch
,ll
utf8_unicode_ci
suit un ancien standard Unicode pour les comparaisons.ij
=ij
, maisae
!=æ
utf8_unicode_520_ci
suit une plus récente de la norme Unicode.ae
=æ
Voir classement graphique pour plus de détails sur ce qui est égal à ce qui, dans divers utf8 classements.
utf8
, tel que défini par MySQL est limitée à 1 à 3 octets en utf-8 codes. Cette part d'Emoji et certains de Chinois. Donc, vous devriez vraiment passer àutf8mb4
si vous voulez aller bien au-delà de l'Europe.Les points ci-dessus s'appliquent à
utf8mb4
, après modification orthographique. À l'avenir,utf8mb4
etutf8mb4_unicode_520_ci
sont privilégiées.Vraiment, j'ai testé enregistrer les valeurs comme 'é' et 'e' dans la colonne avec unique index et peuvent provoquer l'erreur de doublons sur les deux 'utf8_unicode_ci' et 'utf8_general_ci'. Vous pouvez enregistrer seulement en 'utf8_bin' assemblées 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' classement.
Accepté réponse est obsolète.
Si vous utilisez MySQL 5.5.3+, utilisez
utf8mb4_unicode_ci
au lieu deutf8_unicode_ci
pour assurer les caractères tapés par vos utilisateurs n'auront pas de vous donner des erreurs.utf8mb4
prend en charge les émoticônes par exemple, alors queutf8
vous donnera peut-être des centaines de codage des bogues comme:Incorrect string value: ‘\xF0\x9F\x98\x81…’ for column ‘data’ at row 1