Quelle est la différence entre utf8 et utf8mb4 ?
Lorsque vous travaillez avec des bases de données MySQL, vous pouvez rencontrer les encodages de caractères utf8 et utf8mb4, qui peuvent sembler similaires à première vue. Cependant, ils présentent des différences significatives qui peuvent avoir un impact sur la manière dont vos données sont stockées et affichées, en particulier lorsqu’il s’agit de caractères divers et d’emojis. Il est essentiel de comprendre les différences entre utf8 et utf8mb4 pour choisir le bon jeu de caractères pour votre base de données et vous assurer que vos données sont stockées correctement.
Dans cet article, nous allons explorer les distinctions entre utf8 et utf8mb4 dans MySQL, pourquoi utf8mb4 a été introduit, et comment migrer votre base de données pour utiliser utf8mb4 si nécessaire.
Qu’est-ce que l’utf8 dans MySQL ?
Dans MySQL, le jeu de caractères utf8 a été historiquement utilisé pour stocker des données Unicode. Il était destiné à prendre en charge tous les caractères Unicode, ce qui le rendait adapté à la plupart des données textuelles, y compris à de nombreuses langues et à des caractères spéciaux. Cependant, l’implémentation utf8 de MySQL ne prend en charge qu’un sous-ensemble de la norme UTF-8 complète.
Combien d’octets utf8 utilise-t-il ?
Le jeu de caractères utf8 de MySQL encode les caractères en utilisant 1 à 3 octets par caractère. Cela signifie qu’il ne peut pas représenter les caractères nécessitant 4 octets, tels que certains emojis et certains caractères chinois, japonais et coréens (CJK) moins couramment utilisés. Si vous essayez de stocker de tels caractères de 4 octets dans une colonne utf8, MySQL renverra une erreur, ce qui entraînera des échecs d’insertion de données.
Exemple de caractères non pris en charge par utf8 :
- Emojis comme ?, ?, et ❤️.
- Certains caractères CJK rares.
- Symboles mathématiques et autres symboles Unicode spécialisés.
Cette limitation a conduit à l’introduction de utf8mb4 dans MySQL.
Qu’est-ce que l’utf8mb4 dans MySQL ?
Le jeu de caractères utf8mb4 de MySQL est une véritable implémentation de la norme UTF-8 complète. Il supporte de 1 à 4 octets par caractère, ce qui permet d’utiliser la gamme complète des caractères Unicode. Cela inclut tous les caractères pris en charge par utf8, ainsi que les caractères supplémentaires de 4 octets non pris en charge par utf8.
Pourquoi utf8mb4 a-t-il été introduit ?
MySQL a introduit utf8mb4 pour pallier les insuffisances d’utf8. Avec utf8mb4, vous pouvez stocker n’importe quel caractère Unicode valide, y compris les emojis, les notes de musique, les symboles mathématiques et l’ensemble du jeu de caractères CJK. Cela fait de utf8mb4 le jeu de caractères préféré des applications modernes qui doivent prendre en charge un large éventail de données textuelles.
Principales différences entre utf8 et utf8mb4
Caractéristiques | utf8 | utf8mb4 |
Octets par caractère | 1-3 | 1-4 |
Couverture Unicode | Partielle (exclut les caractères de 4 octets) | Complète (prend en charge tout l’Unicode) |
Prise en charge des emoji | Non | Oui |
Caractères CJK | La plupart mais pas tous | Tous |
Compatibilité | Bases de données existantes | Recommandé pour les nouveaux projets |
1. Longueur de l’octet
La différence la plus importante entre utf8 et utf8mb4 est le nombre d’octets qu’ils utilisent pour stocker les caractères. utf8 supporte jusqu’à 3 octets, tandis que utf8mb4 supporte jusqu’à 4 octets. Par conséquent, utf8mb4 peut stocker une plus large gamme de caractères Unicode.
2. Emoji et caractères spéciaux
Si vous devez stocker des emojis ou des caractères spéciaux nécessitant 4 octets, utf8mb4 est la seule option viable. Avec utf8, toute tentative de stockage d’un caractère de 4 octets entraîne une erreur, ce qui peut provoquer des pertes de données ou des défaillances dans les applications.
3. Compatibilité avec les bases de données
utf8 était le jeu de caractères par défaut pour de nombreuses anciennes installations de MySQL, ce qui le rendait compatible avec les anciens systèmes. Cependant, pour les nouveaux projets et applications qui doivent supporter un public international avec des jeux de caractères différents, utf8mb4 est maintenant le choix recommandé.
Pourquoi utiliser utf8mb4 au lieu de utf8 ?
Compte tenu des limitations de l’utf8, l’utilisation de l’utf8mb4 est généralement un meilleur choix pour les applications modernes. Voici quelques raisons de préférer utf8mb4 :
- Support complet de l’Unicode: utf8mb4 vous permet de stocker tous les caractères Unicode, y compris les emojis, qui deviennent de plus en plus courants dans les contenus générés par les utilisateurs.
- Protection de l’avenir: Au fur et à mesure que de nouveaux caractères sont ajoutés à la norme Unicode, utf8mb4 s’assure que votre base de données peut les gérer.
- Compatibilité globale: Avec utf8mb4, vous n’avez pas à vous soucier de la compatibilité des jeux de caractères avec les différentes langues et les symboles spéciaux.
Quand devriez-vous encore utiliser utf8 ?
Dans certains cas, l’utilisation de utf8 peut être envisagée :
- Espace de stockage: Comme utf8mb4 utilise jusqu’à 4 octets par caractère, la taille des bases de données peut être légèrement supérieure à celle de utf8. Cependant, cette différence est souvent négligeable pour la plupart des applications.
- Systèmes existants: Si vous disposez d’une application ou d’une base de données existante qui utilise utf8 et que vous n’avez pas besoin de stocker des caractères de 4 octets, il n’est peut-être pas nécessaire de changer de système.
Comment convertir une base de données de utf8 à utf8mb4 ?
Si vous décidez de migrer une base de données MySQL existante de utf8 à utf8mb4, quelques étapes sont nécessaires pour assurer une transition en douceur. Voici un guide général pour convertir votre base de données en utf8mb4.
Étape 1 : Sauvegarde de votre base de données
Avant de procéder à des modifications, sauvegardez toujours votre base de données afin d’éviter toute perte de données :
mysqldump -u nom_utilisateur -p nom_de_la_base_de_données > database_backup.sql
Étape 2 : Modifier le jeu de caractères et la collation
Exécutez les commandes SQL suivantes pour modifier le jeu de caractères et la collation de votre base de données, de vos tables et de vos colonnes en utf8mb4 :
ALTER DATABASE nom_de_la_base CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ;
Pour chaque table, exécutez :
ALTER TABLE nom_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
Cette opération modifie le jeu de caractères et la collation pour la table spécifiée et ses colonnes.
Étape 3 : Mise à jour du fichier de configuration
Pour vous assurer que les nouvelles tables et colonnes utilisent utf8mb4 par défaut, mettez à jour votre fichier de configuration MySQL (my.cnf ou my.ini) avec les paramètres suivants :
[client]
default-character-set = utf8mb4
[mysql]
jeu de caractères par défaut = utf8mb4
[mysqld]
character-set-server = utf8mb4
serveur de collation = utf8mb4_unicode_ci
Redémarrez MySQL pour appliquer les modifications :
sudo service mysql restart
Étape 4 : Vérifier les changements
Vérifiez que le jeu de caractères a bien été mis à jour :
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%' ;
La sortie devrait afficher utf8mb4 comme jeu de caractères pour votre base de données.