簡體   English   中英

即使將字符集和排序規則更改為utf8,也無法將中文,俄語等字符存儲到mysql表中

[英]Cannot store chinese,russian etc characters into mysql table even after changing charset and collation to utf8

我有一個屏幕,用戶可以在其中看到英語單詞並輸入任何語言的等效翻譯。

我的數據庫創建查詢:

CREATE DATABASE IF NOT EXISTS lang_db
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

我的表創建查詢:

CREATE TABLE lang_map (
WORD         VARCHAR(2048) NULL,
DESCRIPTION     VARCHAR(2048) NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci; 

我在用Java讀取的json中得到單詞和描述,然后觸發查詢以插入到表中。 但是對於像中文或俄語這樣的語言,唯一要插入的內容是? 的。

MySQL版本:5.5 Java:1.6

更新 :Java代碼:

控制器處理ajax調用。

@ResponseBody
public setChanges(@RequestBody JSONObject keyValueMap) throws Exception {
    return myService.setChanges(keyValueMap);
}

服務代碼

List<LangMapping> langMappings = new ArrayList<LangMapping>();
for(Object keyObject : changedKeyValueMap.keySet()){ 
    String key = String.valueOf(keyObject) ;
    String description = (String) changedKeyValueMap.get(key);
    langMappings.add(buildLangMapping(key,localeCode,description)); //pojo
}
//using above array list i am inserting into database table

您將必須確保在應用程序的每個階段都使用正確的編碼。 最簡單的方法通常是在所有情況下使用相同的編碼 ,在您的情況下為UTF-8。

要調試您的問題,您可以按照以下步驟操作:

  1. 使用諸如Notepad ++之類的優質文本編輯器,打開您得到的一些JSON文件,檢查它們是否正確編碼(即俄語/中文/其他字符是否正確顯示),並檢查編輯器是否自動檢測到JSON的編碼。 JSON文件為UTF-8。

    如果您沒有源JSON數據作為文件,而是將其作為對某些Web請求的響應而獲得的,則嘗試使用wgetcurl等工具將其轉儲到文件中,並如上所述檢查該文件。

  2. 用JAVA讀取JSON輸入后,請先從JAVA中轉儲輸入,然后再進行進一步處理。 我不知道JAVA,但這是一個普遍的問題,您必須告訴您的編程語言/庫/文件打開功能輸入的編碼方式。

    如果您不這樣做,JAVA可能會假設JSON輸入采用某種默認編碼。 如果出錯,則讀入的數據將是垃圾。

    同樣,在轉儲已讀內容之前,請告訴JAVA輸出的編碼方式。 如果轉儲到控制台,請確保控制台也使用您期望的編碼。

    請注意,這對於使用CGI機制的Web應用程序也是如此(幾乎所有方法都如此)。 在這種情況下,標准輸入和標准輸出可以視為普通文件。

    當然,如果JAVA的文件和標准I / O的默認編碼已經是UTF-8,則可以省略此步驟。

  3. 如果尚未發現問題,請告訴數據庫驅動程序您正在發送UTF8編碼的數據,並且想要獲取UTF-8編碼的數據。 由於我不使用JAVA,因此我不知道如何執行此操作,但是我可以確定文檔中已對它進行了描述。

  4. 如果仍然無法正常工作,請告訴MySQL連接和客戶端使用UTF-8(只要驅動程序在實現步驟3之后沒有自動執行此操作)。 使用SET SESSION character_set_x = 'utf8'類的語句,其中x代表clientresultsconnection 連接到數據庫后,您每次都必須立即執行此操作(當然,再次取決於您的驅動程序在連接時根據運行時或靜態配置自動不執行此操作)。

如果執行這些步驟,則有望找到問題所在。 讓我們知道怎么回事。

UTF不會保存俄語,中文,德語等其他語言的所有字符。您可以參考utf8和latin1之間的差異

暫無
暫無

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

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