web-dev-qa-db-fra.com

Quelle est la différence entre les jeux de caractères utf8mb4 et utf8 dans MySQL?

Quelle est la différence entre utf8mb4 et utf8 jeux de caractères dans MySQL ?

Je sais déjà à propos de ASCII, UTF-8 , UTF-16 et UTF-32 encodages; mais je suis curieux de savoir quelle est la différence entre utf8mb4 groupe de codages avec d'autres types de codage définis dans le serveur MySQL .

Existe-t-il des avantages/propose d'utiliser utf8mb4 plutôt que utf8?

276

TF-8 est un codage à longueur variable. Dans le cas de UTF-8, cela signifie que l'enregistrement d'un point de code nécessite un à quatre octets. Cependant, le codage de MySQL appelé "utf8" (alias de "utf8mb3") ne stocke qu'un maximum de trois octets par point de code.

Ainsi, le jeu de caractères "utf8"/"utf8mb3" ne peut pas stocker tous les points de code Unicode: il ne prend en charge que la plage 0x000 à 0xFFFF, appelée " plan multilingue de base ". Voir aussi Comparaison des codages Unicode .

C’est ce que (une version précédente de la même page sur) la documentation MySQL dit à ce sujet:

Le jeu de caractères nommé utf8 [/ utf8mb3] utilise un maximum de trois octets par caractère et ne contient que BMP caractères. Depuis MySQL 5.5.3, le jeu de caractères utf8mb4 utilise au maximum quatre octets par caractère et prend en charge les caractères supplémentaires:

  • Pour un caractère BMP, utf8 [/ utf8mb3] et utf8mb4 ont des caractéristiques de stockage identiques: mêmes valeurs de code, même encodage, même longueur.

  • Pour un caractère supplémentaire, utf8 [/ utf8mb3] ne peut pas stocker le caractère du tout , alors que utf8mb4 nécessite quatre octets pour le stocker. Comme utf8 [/ utf8mb3] ne peut pas du tout stocker le caractère, vous n'avez pas de caractères supplémentaires dans les colonnes utf8 [/ utf8mb3] et vous n'avez pas à vous soucier de la conversion des caractères ou de la perte de données lors de la mise à niveau des données utf8 [/ utf8mb3] à partir d'anciennes versions de MySQL.

Donc, si vous voulez que votre colonne prenne en charge le stockage de caractères situés en dehors de BMP (et que vous voulez généralement), tel que emoji , utilisez "utf8mb4". Voir aussi Quels sont les caractères Unicode autres que BMP les plus utilisés actuellement? .

326
CodeCaster

Le jeu de caractères utf8mb4 est utile car, de nos jours, nous avons besoin de l’aide pour stocker non seulement des caractères de langue, mais également des symboles, des émojis nouvellement introduits, etc.

Une bonne lecture à lire Comment supporter Full Unicode dans les bases de données MySQL par Mathias Bynens peut également apporter des éclaircissements à ce sujet.

48
Jimmy Kane

Tiré de MySQL 8.0 Reference Manual :

  • utf8mb4: A TF-8 codage du jeu de caractères nicode utilisant un à quatre octets par caractère.

  • utf8mb3: A TF-8 codage du jeu de caractères nicode utilisant un à trois octets par caractère.

Dans MySQLutf8 est actuellement un alias pour utf8mb3 qui est obsolète et sera supprimé de une future MySQL release. À ce stade, utf8 deviendra une référence à utf8mb4.

Ainsi, quel que soit cet alias, vous pouvez consciemment vous définir un codage utf8mb4.

27
simhumileco