Maison > Article > base de données > Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL
MySQL prend en charge UTF-8 depuis la version 4.1, qui date de 2003. Cependant, la norme UTF-8 actuellement populaire (RFC 3629) a été stipulée par la suite. Pour cette raison, l'UTF-8 dans MySQL n'est pas cohérent avec l'UTF-8 dans notre développement quotidien, ce qui a causé quelques problèmes. L'UTF-8 de MySQL ne prend en charge que jusqu'à trois octets par caractère, tandis que le véritable UTF-8 prend en charge jusqu'à quatre octets par caractère.
Il existe des tables de base de données comme suit : méthode d'encodage utf8
Mettre un enregistrement dans la base de données :
@Test public void testInsert() { User user = new User(); user.setUsername("\uD83D\uDE00 "); user.setPassword("123456"); userRepo.save(user); }
Ceci n'est qu'une partie du code. Peu importe si vous ne le comprenez pas. Il s'agit d'insérer un enregistrement dans la table utilisateur. Où le nom d'utilisateur est uD83DuDE00.
En fait, uD83DuDE00 est une expression emoji.
Étant donné que le jeu de caractères utf8 dans MySQL ne prend en charge que la plage Unicode codée en UTF-8 sur trois octets et que les caractères emoji appartiennent à la partie d'encodage sur quatre octets, le programme devrait s'exécuter. Signalé une erreur. Exécutez ce code :
Comme prévu, une erreur est signalée.
Bien que l'UTF-8 de MySQL soit défectueux, MySQL (y compris mariadb) n'a officiellement pas corrigé ce bug, mais a plutôt pris en charge la vraie version via la réédition "utf8mb4" dans 2010. UTF-8. Par conséquent, pour résoudre ce problème, le seul moyen est de définir la base de données MySQL sur le jeu de caractères utf8mb4.
Ce problème a également été découvert car une expression emoji a été enregistrée lors de la sauvegarde des données. En fait, lorsque j'ai commencé à utiliser MySQL, j'ai découvert utf8mb4, mais je n'ai pas compris la différence entre UTF8 et UTF8MB4. Après cette leçon, lorsque vous utiliserez MySQL à l'avenir, définissez honnêtement le jeu de caractères sur utf8mb4.
Pour plus d'articles techniques liés à MySQL, veuillez visiter la colonne Tutoriel MySQL pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!