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
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 le groupe d'encodages utf8mb4
et les autres types d'encodage définis dans MySQL Server .
y a-t-il des avantages spéciaux ou des propositions d'utiliser utf8mb4
plutôt que utf8
?
3 réponses
UTF-8 est un encodage de longueur variable. Dans le cas de L'UTF-8, cela signifie que le stockage d'un point de code nécessite de un à quatre octets. Cependant, L'encodage de MySQL appelé "utf8" ne stocke qu'un maximum de trois octets par point de code.
ainsi le jeu de caractères" utf8 " ne peut pas stocker tous les points de code Unicode: il soutient seulement la gamme de 0x000 à 0xFFFF, qui est appelé le " Plan multilingue de base ". Voir aussi Comparaison des codages Unicode .
C'est ce que la documentation MySQL a à dire à ce sujet:
le jeu de caractères nommé utf8 utilise un maximum de trois octets par caractère et ne contient que des caractères BMP. À partir de MySQL 5.5.3, le jeu de caractères utf8mb4 utilise un maximum de quatre octets par caractère supporte des caractères supplémentaires:
pour un Le caractère BMP, utf8 et utf8mb4 ont des caractéristiques de stockage identiques: mêmes valeurs de code, même encodage, même longueur.
Pour un caractère complémentaire utf8 ne peut pas stocker le caractère à tous , tandis que utf8mb4 nécessite quatre octets pour stocker. Puisque utf8 ne peut pas stocker le caractère du tout, vous n'avez pas de caractères supplémentaires dans les colonnes utf8 et vous n'avez pas à vous soucier de convertir des caractères ou de perdre des données quand mise à niveau des données utf8 à partir d'anciennes versions de MySQL.
donc si vous voulez que votre colonne supporte le stockage de caractères se trouvant à l'extérieur du BMP (et vous le voulez généralement), comme emoji , utilisez"utf8mb4". Voir aussi Quels sont les caractères Unicode non-BMP les plus couramment utilisés? .
le jeu de caractères utf8mb4
est utile parce qu'aujourd'hui nous avons besoin d'aide pour stocker non seulement les caractères de la langue, mais aussi les symboles, emojis nouvellement introduits, et ainsi de suite.
Une belle lecture sur Comment support complet de l'Unicode dans les bases de données MySQL par Mathias Bynens pouvez également faire la lumière sur cette.
tiré du MySQL 8.0 Manuel de référence :
utf8mb4
: UN UTF-8 codage de la Unicode jeu de caractères à l'aide de l'un à l' quatre octets par caractère.
utf8mb3
: a UTF-8 encodage de la Unicode jeu de caractères utilisant un à trois octets par caractère.
Dans MySQL utf8
est un alias de utf8mb3
qui est depracted et sera supprimée dans une future MySQL . À ce moment utf8
deviendra une référence à utf8mb4
.
donc, indépendamment de cet alias, vous pouvez consciemment définir un encodage utf8mb4
.