簡體   English   中英

Java用utf8mb4將無法讀取的代碼寫入mysql

[英]java write unreadable code into mysql with utf8mb4

我遇到了一個很奇怪的問題。 我有兩個相同的字符串,分別是chinse“君山”,一個來自kafka,一個來自mysql字段(utf8mb4)。 我將兩個字符串寫入mysql的另一個表中,該字段也是utf8mb4編碼的,來自kafka的一個變成了不可閱讀的代碼“ ??”,另一個還可以!

然后我用以下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));
}

我得到如下輸出:

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

我檢查了unicode表,中文文本“君”應為“ 0x541b”,“山”應為“ 0x5c71”。 因此,oldName是有意義的,我不知道newName輸出的代碼是什么,更難理解的是oldName變成了不可讀的代碼“ ??” 我將其保存到mysql后,請newName很好。

順便說一句,我使用spring + mybatis框架來操作mysql

我偶然解決了這個問題,我的mysql服務器是阿里雲服務提供的rds服務。 我更改了jdbc連接器字符串,並且問題已解決,而且我不知道為什么!

在此處輸入圖片說明

上面的一個是舊的,下面的一個解決了我的問題

我的jdbc conntector版本是5.1.31

只需在控制面板中更改服務器計算機的系統區域設置即可。

這里有一個視頻,展示了如何更改它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM