Maison >base de données >tutoriel mysql >Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL

Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL

步履不停
步履不停original
2019-06-19 14:01:042493parcourir

Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL

Encodage MySQL UTF-8

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.

Reproduction du problème

Il existe des tables de base de données comme suit : méthode d'encodage utf8

下载 (2).jpg

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.

Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL

É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 :

Pourquoi ne pas utiliser l'encodage UTF-8 dans MySQL

Comme prévu, une erreur est signalée.

Résoudre le problème

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.

Résumé

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn