MySQL utf8 vs utf8mb4 : 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 à première vue peuvent sembler similaires. Cependant, ils présentent des différences significatives qui peuvent affecter le stockage et l’affichage des données, en particulier lorsqu’il s’agit de caractères différents 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 verrons les différences entre utf8 et utf8mb4 dans MySQL, les raisons de l’utilisation de utf8mb4 et comment migrer votre base de données vers utf8mb4 si nécessaire.
Qu’est-ce que l’utf8 dans MySQL ?
Dans MySQL, le jeu de caractères utf8 a toujours été utilisé pour stocker des données Unicode. Il a été conçu pour prendre en charge tous les caractères Unicode, ce qui le rend adapté à la plupart des données textuelles, y compris à de nombreuses langues et caractères spéciaux. Cependant, l’implémentation de l’utf8 dans MySQL ne prend en charge qu’un sous-ensemble de la norme UTF-8 complète.
Combien d’octets l’utf8 utilise-t-il ?
Le jeu de caractères utf8 de MySQL encode les caractères en utilisant entre 1 et 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 courants. Si vous essayez de stocker de tels caractères de 4 octets dans une colonne utf8, MySQL renverra une erreur, ce qui entraînera l’échec de l’insertion des données.
Exemple de caractères non pris en charge en utf8 :
- Emoji tels que 😊, 🚀 et ❤️.
- Certains caractères CJK rares.
- Symboles mathématiques et autres caractères Unicode spécialisés.
Cette limitation a conduit à l’implémentation de utf8mb4 dans MySQL.
Qu’est-ce que 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 l’ensemble du jeu de caractères Unicode. Cela inclut tous les caractères pris en charge par utf8, ainsi que des 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 emoji, 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éristique | 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 l’ensemble de l’Unicode) |
Prise en charge des emoji | Non | Oui |
Caractères CJK | La plupart, mais pas tous | Tous |
Compatibilité | Bases de données obsolètes | 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 utilisés pour stocker les caractères. utf8 supporte jusqu’à 3 octets, tandis que utf8mb4 supporte jusqu’à 4 octets. Par conséquent, utf8mb4 peut stocker un plus grand nombre de caractères Unicode.
2. Emoji et caractères spéciaux
Si vous devez stocker des emoji 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înera une erreur, ce qui peut provoquer une perte de données ou un blocage de l’application.
3. Compatibilité des 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 les applications qui doivent supporter une audience globale avec différents jeux de caractères, utf8mb4 est maintenant recommandé.
Pourquoi utiliser utf8mb4 au lieu de utf8 ?
Compte tenu des limites 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.
- Prospectivité: 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 prendre en charge.
- 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 caractères spéciaux.
Quand dois-je encore utiliser utf8 ?
Il y a quelques scénarios dans lesquels utf8 devrait être utilisé :
- Espace de stockage des données: Comme utf8mb4 utilise jusqu’à 4 octets par caractère, la taille de la base de données peut être légèrement supérieure à celle de utf8. Cependant, pour la plupart des applications, cette différence est souvent négligeable.
- Systèmes existants: si vous avez une application ou 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 convertir une base de données MySQL existante de utf8 à utf8mb4, plusieurs étapes sont nécessaires pour assurer une transition en douceur. Voici un guide général sur la façon de convertir une base de données en utf8mb4.
Étape 1 : Sauvegarde de la 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 la commande :
ALTER TABLE nom_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
Cette commande modifie le jeu de caractères et la collation pour la table spécifiée et ses colonnes.
Étape 3 : Mettre à jour le fichier de configuration
Pour que les nouvelles tables et colonnes utilisent utf8mb4 par défaut, mettez à jour le fichier de configuration de 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%' ;
En conséquence, vous devriez voir utf8mb4 comme jeu de caractères pour votre base de données.