Mysql
 sql >> Base de données >  >> RDS >> Mysql

Affichage des caractères japonais de SQLException.getMessage()

ラケシュ12345

Correct ?

Probablement ce qui s'est passé lors de l'INSERTION

  • Vous aviez un encodage utf8 correct pour les données, et
  • SET NAMES latin1 -- par défaut ou par erreur, et
  • La colonne (ou la table) dans laquelle le texte a été stocké a été déclarée avec CHARACTER SET latin1 , encore une fois peut-être par défaut.

Vous pouvez vérifier que les données sont stockées correctement en faisant

SELECT col, HEX(col) ...

Si vous récupérez cette chaîne, l'hexadécimal sera E383A9E382B1E382B7E383A5EFBC91EFBC92EFBC93EFBC94EFBC95 . Remarquez comment il y a des groupes de 6 hex, commençant par E383 dans le cas de Katakana ou EFBC pour les "chiffres pleine largeur".

En supposant que la table indique toujours latin1, aucune donnée n'est perdue et le ALTER en 2 étapes va le réparer. En résumé :

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;

où les longueurs sont assez grandes et les autres "..." ont tout ce qui (NOT NULL, etc.) était déjà sur la colonne.

(Je n'ai pas pu donner une réponse claire et complète à cette question jusqu'à très récemment.)