utf8mb4 dans MySQL Workbench et JDBC
J'ai travaillé avec une codé en UTF-8 DB MySQL qui doit aujourd'hui être en mesure de stocker de 4 octets émoticônes, j'ai donc décidé de changer de codage utf8 pour utf8mb4:
ALTER DATABASE bstdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE HISTORY CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE HISTORY CHANGE SOURCE_CONTEXT SOURCE_CONTEXT VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Et changé mysql.conf.d "character-set-server = utf8" à "character-set-server = utf8mb4"
Après ces étapes, je suis en mesure de stocker des émoticônes (comme 💢),mais seulement lorsque la requête SQL est exécutée dans la console MySQL: Lorsque j'essaie de lancer la requête à partir de MySQL Workbench ou à partir d'un Wildfly webapp, j'obtiens cette erreur:
Code D'Erreur: 1366. Incorrecte de la chaîne de valeur: '\xF0\x9F\x92\xA2' pour la colonne 'SOURCE_CONTEXT' à la ligne 1
Je suppose que j'ai besoin de changer la façon dont les clients sont de la connexion à la DB, mais je n'ai aucune idée sur comment. J'ai lu quelque chose sur l'utilisation de "useUnicode=yes" dans JDBC, mais ne fonctionne pas.
${bdpath:3306/bstdb?useUnicode=oui}
Modifier:
Comme suggéré dans les commentaires, j'ai essayé avec:
${bdpath:3306/bstdb?characterEncoding=UTF-8}
mais pas de chance, je suis le même "Incorrect de la chaîne de valeur: '\xF0\x9F\x92\xA2'" erreur.
Aussi essayé
${bdpath:3306/bstdb?useUnicode=true&characterEncoding=utf8mb4&}
mais il refuse de ettre en place une connexion.
Aucune idée sur la façon de configurer MySQL workbench et/ou JDBC/Wildfly?
Version de MySQL est 5.7.18
MySQL WorkBench version 6.0.8
Pilote JDBC version est 5.1.34
Merci!
OriginalL'auteur motagirl2 | 2017-06-16
Vous devez vous connecter pour publier un commentaire.
Enfin, il fonctionne. C'était un problème avec les procédures stockées, qui était encore utf8 au lieu de utf8mb4 après la migration.
C'était un 2-les étapes de la solution.
Exécuter mysql:
Chute de procédures, et de créer de nouveau. Ils seront en utf8mb4.
Peut être vérifié avec
qu'entendez-vous par "drop procédures" ? et pour votre 3ème point, pouvez-vous donner un exemple de ce que le
procedure_name
est? Obtenir des résultats vides 🙁Par "procédures", je veux dire ceux qui ont été créés au cours de cette base de données, à l'aide de la "création d'une PROCÉDURE de procedure_name etc etc" ("procedure_name" est le nom que vous donnez à cette procédure, comme un nom de fonction)
OriginalL'auteur motagirl2
Vous pouvez suivre la documentation disponible pour MySQL afin de résoudre votre problème. Voici la Documentation de MySQL, que vous pouvez consulter.
Fondamentalement, votre
ALTER TABLE
scripts peuvent être modifiées que par la documentation mentionnée ci-dessus, et puis vous pouvez utiliser le paramètre suivant dans votre chaîne de connexion pour que les modifications prennent effet.S'il vous plaît n'oubliez pas de redémarrer votre serveur MySQL services après avoir fait le jeu de caractères et la modification d'encodage.
Vous spécifiez le codage Java ici, donc vous devez utiliser
UTF-8
.Ouais, corrigée!
Rien. Le même problème à la beginnging: Histoire: erreur dans la méthode de "créer": java.sql.SQLException: Pas de chaîne de valeur: '\xF0\x9F\x92\xA2' pour la colonne 'srcctxt' à la ligne 1 :/
OriginalL'auteur N00b Pr0grammer
Utilisation
characterEncoding=utf8
pour jdbc urlVérifiez également que vous avez configuré MySQL pour fonctionner avec
utf8mb4
Voir ici
Vous spécifiez le codage Java ici, donc vous devez utiliser
UTF-8
.Non, elle n'a pas besoin de l'encodage utf8
essayer ma mise à jour de réponse
J'ai essayé, et il a refusé de se connecter
OriginalL'auteur Mike Adamenko
À partir de MySQL Connector/J 5.1.47,
Vous pouvez vérifier docs ici
OriginalL'auteur Alaa Nassef