私は本当に奇妙な問題を抱えています。私は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の
はあなたの接続の文字セットを確認しましたか?コマンドの 'show variable like '' character_set% ';' show? – leeyuiwah
はい、私はそれをチェックしました、私は各接続のためにutf8mb4という名前を設定しました – dzthink
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