2017-01-07 1 views
0

J'ai un problème vraiment bizarre. J'ai deux cordes qui sont chinse "君山", une de kafka, et une d'un champ mysql (utf8mb4). J'écris deux chaînes dans une autre table de mysql, aussi le champ est codé en utf8mb4, celui de kafka se transforme en code illisible "??", l'autre est ok!java écris du code illisible dans mysql avec utf8mb4

Puis-je imprimer deux cordes avec suivi du code Java

//old_name from kafka 
//group.getName() from mysql 
//old_name,group.getName() should be the same "君山" 
char[] oldNameCharArray = old_name.toCharArray(); 
char[] newNameCharArray = group.getName().toCharArray(); 

System.out.print("oldName:") 
for(char ch : oldNameCharArray) { 
    int value = (int)ch; 
    System.out.print((Integer.toHexString(value))); 
} 
System.out.println("-----------------------------------------"); 
System.out.print("newName:"); 
for(char ch : newNameCharArray) { 
    int value = (int)ch; 
    System.out.print(Integer.toHexString(value)); 
} 

Je suis sortie comme ci-dessous:

oldName:541b5c71 
----------------------------------------- 
newName:15a17af515a12a12a 

Je vérifier la table unicode, le texte chinse "君" devrait être "0x541b" et "山" devrait être "0x5c71". Donc oldName a du sens, je ne sais pas quel type de code est pour la sortie newName, et plus difficile à comprendre est que oldName devient un code illisible "??" après l'avoir sauvegardé dans mysql, le nom newName est bon.

Par ailleurs, j'utiliser le printemps + cadre mybatis pour faire fonctionner MySQL

+0

Avez-vous vérifié le jeu de caractères de votre connexion? Quelle serait la commande 'afficher des variables comme 'character_set%';' show? – leeyuiwah

+0

oui, j'ai vérifié cela, j'utilise des noms de set utf8mb4 pour chaque connexion – dzthink

+0

UTF8 n'est pas le même que UTF8mb4. Ces deux liens peuvent être utiles (1) http://stackoverflow.com/questions/5078314/isnt-the-size-of-character-in-java-2-bytes (2) https://dev.mysql.com /doc/refman/5.5/en/charset-unicode-utf8mb4.html – leeyuiwah

Répondre

-1

changer juste paramètres régionaux du système de votre machine serveur dans le panneau de commande.

here Une vidéo est disponible pour montrer comment la changer.

0

J'ai résolu le problème par hasard, mon serveur mysql est un service rds du service cloud alibaba. J'ai changé ma chaîne de connecteur jdbc et le problème est résolu, et je ne sais pas pourquoi!

enter image description here

celui ci-dessus est ancien, et celui ci-dessous résolu mon problème

ma jdbc version conntector 5.1.31

quels