2011-06-14 71 views
0

我有一個utf-8格式的MYSQL數據庫,但數據庫中的字符是ISO-8859-1(ISO-8859-1字符串存儲在utf-8中)。我嘗試過重新編碼,但它只轉換ü到ü¼)。有沒有人有解決方案?字符集問題

+0

最簡單的方法是重新導入具有指定的正確字符集的數據。任何方式來做到這一點? – 2011-06-14 11:04:33

+0

我不能重新進口 – niklas 2011-06-14 11:06:29

+0

這裏有一個很好的答案重複:[我需要幫助修復破損的UTF8編碼](http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding ) – 2011-06-14 11:07:36

回答

0

如果您試圖在設置爲UTF-8的數據庫中存儲ISO-8859-1字符,您只是設法破壞了您的「特殊字符」 - 因爲MySQL會從數據庫中檢索字節並嘗試將它們組裝爲UTF-8而不是ISO-8859-1。正確讀取數據的唯一方法是使用一個腳本,做一些事情,如:

ResultSet rs = ... 
byte[] b = rs.getBytes(COLUMN_NAME); 
String s = new String(b, "ISO-8859-1"); 

這將確保您獲得(其中來自一個ISO-8859-1字符串從你所說的)字節,然後您可以將它們組裝回ISO-8859-1字符串。 另一個問題 - 你用什麼來「查看」數據庫中的字符串 - 是不是你的控制檯沒有正確的字符集來顯示這些字符,而不是錯誤地存儲字符?

注:最後更新的評論

+1

數據庫設置爲UTF-8存儲在數據庫中的字符串是iso-8859-1 – niklas 2011-06-14 11:12:51

+1

我剛剛更新了代碼 - 只是在重新組裝字節時使用ISO-8859-1的問題成一個字符串。 – Liv 2011-06-14 11:16:51

0

我只是通過這個去後上方。我解決方案的最大部分是將數據庫導出到.csv並查找/替換有問題的字符。問題中的字符可能看起來像一個空格,但直接從單元格複製它作爲查找參數。

一旦做到這一點 - 和失蹤,這是整個上午都什麼花了我:

  • 將文件保存爲CSV(MS-DOS)

優秀post在這個問題上

MS-DOS的來源idea