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

Quelle est la différence entre les jeux de caractères utf8mb4 et utf8 dans mysql?
Je connais déjà les codages ASCII, UTF-8, UTF-16 et UTF-32 ; mais je suis curieux de savoir quelle est la différence du groupe d’encodages ‘utf8mb4’ avec d’autres types d’encodage définis dans le serveur mysql.

Existe-t-il des avantages / propositions particuliers d’utiliser utf8mb4 plutôt que d’utf8?

    UTF-8 est un encodage de longueur variable. Dans le cas de UTF-8, cela signifie que le stockage d’un sharepoint code nécessite un à quatre octets. Cependant, l’encodage de MySQL appelé “utf8” ne stocke qu’un maximum de trois octets par sharepoint code.

    Ainsi, le jeu de caractères “utf8″ 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 .

    Voici ce que dit la documentation MySQL à 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. Depuis MySQL 5.5.3, le jeu de caractères utf8mb4 utilise un maximum de quatre octets par caractère et prend en charge des caractères supplémentaires:

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

    • Pour un caractère supplémentaire, utf8 ne peut pas stocker le caractère , alors que utf8mb4 nécessite quatre octets pour le stocker. Comme 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 la conversion des caractères ou de la perte de données lors de la mise à jour des données utf8 des anciennes versions de MySQL.

    Donc, si vous souhaitez que votre colonne prenne en charge le stockage de caractères situés en dehors du BMP (et que vous souhaitez généralement), tels que les emoji , utilisez “utf8mb4”. Voir aussi Quels sont les caractères Unicode non-BMP les plus courants en cours d’utilisation? .

    Le utf8mb4 caractères utf8mb4 est utile car de nos jours, nous avons besoin de prendre en charge le stockage non seulement des caractères de langage, mais aussi des symboles, des nouveaux émoticons, etc.

    Une bonne lecture de Comment prendre en charge l’Unicode complet dans les bases de données MySQL par Mathias Bynens peut également vous aider.