2017-01-07 5 views
0

私は本当に奇妙な問題を抱えています。私は2つの同じ文字列をchinse "君山"、1つはカフカ、もう1つはmysqlフィールド(utf8mb4)です。私はmysqlの別のテーブルに2つの文字列を書きます。また、フィールドはutf8mb4でエンコードされています。カフカからの文字はunreadebleコード "??"に変わり、もう1つはOKです!javaはutf8mb4でmysqlにコードを読むことができません

その後、私は、私は以下のような出力を得フォロー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)); 
} 

で2つの文字列を印刷:

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

私はUnicodeのテーブルをチェックする必要があり、chinseテキスト "君" でなければなりません "0x541bを" 「山」は「0x5c71」である必要があります。だからoldNameは意味がありますが、私はどのようなコードがnewNameの出力であるのか分かりません。理解するのが難しいのはoldNameが判読不能なコード "??"私はそれをmysqlに保存した後、newNameがうまくいっています。ところで

は、私はちょうどコントロールパネルで、サーバー・マシンのシステムロケールを変更するmysqlの

+0

はあなたの接続の文字セットを確認しましたか?コマンドの 'show variable like '' character_set% ';' show? – leeyuiwah

+0

はい、私はそれをチェックしました、私は各接続のためにutf8mb4という名前を設定しました – dzthink

+0

UTF8はUTF8mb4と同じではありません。これらの2つのリンクは役に立つかもしれません(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

答えて

-1

を動作させるために、スプリング+ MyBatisのフレームワークを使用しています。

hereビデオを変更する方法が示されています。

0

私は偶然問題を抱きしめました。私のmysqlサーバーはalibabaクラウドサービスのrdsサービスです。私は自分のjdbcコネクタ文字列を変更し、問題は暗くなっています。なぜか分かりません!

enter image description here

上記の一つは古いものであり、以下の一つは私の問題

私のJDBC conntectorバージョンを解決5.1.31

関連する問題