Je rencontre des problèmes avec la structure de ma table:
CREATE TABLE `My_Table_Name1` ( ` Twitter_id_str` varchar (255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `Twitter_screen_name` varchar (512) COLLATE utf8mb4_unicode_ci DEFAULT NULL, CLÉ UNIQUE `Twitter_id_str` (` Twitter_id_str`) ) MOTEUR = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
Pour la base de données, j'ai également le même jeu de caractères et le même classement:
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
J'essaie d'insérer un emoji dans ce tableau:
insert into My_Table_Name1 values("2","????")
Cependant, j'obtiens une erreur:
Code d'erreur: 1366. Valeur de chaîne incorrecte: '\ xF0\x9F\x98\x80' pour la colonne 'Twitter_screen_name' à la ligne 1 0,00027 sec
Comment résoudre ça?
Merci d'avance.
Le problème semble être dans le client.
Lorsque le client se connecte au serveur MySQL, il doit annoncer que les octets du client sont utf8mb4
. Cela peut se faire de plusieurs manières:
SET NAMES utf8mb4
.\U+1F600
est la représentation Unicode de cet Emoji.\xF0\x9F\x98\x80
est l'équivalent Hex.F09F9880
est l'UTF-8 (utf8mb4) en hexadécimal.
Évitez la représentation Unicode.
Cela semble être un problème avec mysql-workbench (testé avec la version 6.3.9 sur Fedora et MySQL 5.7 (CentOS)) où les emojis ne sont pas convertis en unicode correct.
Dans la ligne de commande mysql
client, les emojis sont convertis en codes lorsqu'ils sont collés, donc la requête
INSERT INTO My_Table_Name1 values("2","????");
devient:
INSERT INTO My_Table_Name1 values("4","\U+1F600");
qui fonctionne bien.
Cependant, dans mysql-workbench, l'emoji n'est pas converti lorsque vous le collez et le résultat de la requête est:
Code d'erreur: 1366. Valeur de chaîne incorrecte: "\ xF0\x9F\x98\x80" pour la colonne "Twitter_screen_name" à la ligne 1