155 votes

Différences entre utf8 et latin1

Quelle est la différence entre utf8 et latin1 ?

3 votes

Il s'agit d'encodages différents (avec un peu de caractères mis en correspondance avec des séquences d'octets communes, par exemple les caractères ASCII et de nombreuses lettres accentuées). UTF-8 est un encodage d'Unicode avec tous ses points de code ; Latin1 encode moins de 256 caractères.

0 votes

Il y a aussi latin9 qui est disponible dans les locales Linux et qui aurait pu être mentionné dans la question : fr.wikipedia.org/wiki/ISO/IEC_8859-15

175voto

BalusC Points 498232

UTF-8 est prêt pour la domination du monde, Latin1 ne l'est pas.

Si vous essayez de stocker des caractères non latins comme le chinois, le japonais, l'hébreu, le russe, etc. en utilisant l'encodage Latin1, ils se retrouveront sous la forme suivante mojibake . Vous pouvez trouver le texte d'introduction de cet article utile (et encore plus si vous connaissez un peu Java).

Notez que le support complet de l'UTF-8 sur 4 octets n'a été introduit que dans MySQL 5.5. Avant cette version, il ne va que jusqu'à 3 octets par caractère, et non 4 octets par caractère. Ainsi, il ne supportait que le plan BMP et pas, par exemple, le plan Emoji. Si vous souhaitez une prise en charge complète de l'UTF-8 sur 4 octets, mettez à niveau MySQL vers au moins la version 5.5 ou optez pour un autre SGBDR comme PostgreSQL. Dans MySQL 5.5+, il s'appelle utf8mb4 .

32 votes

Mysql 5.1 prend en charge l'UTF-8 sur 3 octets, cependant Mysql 5.5 soutient 4 octets UTF-8 comme utf8mb4.

0 votes

C'est vrai, mais MySQL 5.5 n'était pas GA au moment où cette réponse a été postée. Elle a été publiée en décembre 2010.

2 votes

@BalusC Pouvez-vous expliquer plus en détail pourquoi UTF-8 n'est pas entièrement pris en charge ? Est-ce que cela signifie que Mysql 5.1 ne peut pas stocker tous caractères unicode ?

58voto

sepp2k Points 157757

En latin1, chaque caractère fait exactement un octet. En utf8, un caractère peut être composé de plus d'un octet. Par conséquent, l'utf8 a plus de caractères que le latin1 (et les caractères qu'ils ont en commun ne sont pas nécessairement représentés par le même octet/la même séquence d'octets).

1 votes

Qu'en est-il de l'ascii et du bin ?

10 votes

@YoushaAleayoub L'ASCII est un codage sur un seul octet qui utilise les caractères 0 à 127, ce qui lui permet de coder deux fois moins de caractères que le latin1. Il s'agit d'un sous-ensemble strict de latin1 et de utf8, ce qui signifie que les octets 0 à 127 de latin1 et de utf8 codent les mêmes choses qu'en ASCII. Bin n'est pas un encodage. Il s'agit généralement d'une option que vous pouvez donner lors de la lecture d'un fichier, indiquant aux fonctions IO de ne pas appliquer d'encodage, mais de lire le fichier octet par octet.

1 votes

Merci, je voulais dire binary collate... ? et lequel est le meilleur pour les champs anglais/numériques : ascii_general_ci ou ascii_bin ?

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