2013-07-01 178 views
0

這些天我一直在使用java和mysql工作。 問題是,我得到了一個MySQL數據庫。一張表中有一列顯示中國城市名稱。一個同事把db變成了utf8,因爲每個字符(連接,數據庫,結果,服務器和系統)都會導致更改前的數據無法正確顯示,只有將%字符%設置回latin1。在任何字符集中,我只能正確地檢索一半數據。你能幫我解決這個問題嗎? 我試圖用java來解決問題,但它不起作用。字符串轉換問題

String sql = "SELECT * FROM customer_addresses"; 
ResultSet result = query.executeQuery(sql); 
while (result.next()) { 
    byte b[] = result.getBytes("city"); 
    c = new String(result.getBytes("city"), "UTF-8"); 
} 

For example: there is one city in db like this 乌é²æœ¨é½å¸‚ 
the java print: 烏�?木�?市 
it should be:烏魯木齊市 

在此先感謝

+1

您的問題不是很清楚。如果一切都設置爲UTF-8,一切工作嗎?我期望 –

+0

謝謝回答,因爲更高級的數據是用latin1編碼的,後來用utf8 – fe3o4

+0

,所以UTF-8編碼的數據被添加到ISO-8859-1數據中?這是愚蠢的,我會說 –

回答

0

MySQL服務器的默認字符集可能不是UTF8。嘗試從數據庫中獲取數據之前,執行下面的SQL查詢:

SET NAMES utf8 

SET CHARACTER SET utf8 
+0

以及香港專業教育學院已經嘗試過,我還是謝謝你 – fe3o4

+0

香港專業教育學院改變了每一個變量,如「%字符%」爲utf8以前 – fe3o4

0

添加characterEncoding=UTF-8連接字符串,在那裏你連接到數據庫。例如:

"jdbc:mysql://servername:3306/databasename?characterEncoding=UTF-8" 

順便說一下,數據庫中的數據似乎已損壞。如果你想讓數據庫存儲烏魯木齊市,那應該放在表格中,而不是乌é²æœ¨é½å¸。

更新:使用數據庫自​​己的工具而不是Java可以更容易地解決數據如何存儲在數據庫中的問題。對於每個存儲文字的表格,請執行以下操作:

ALTER TABLE tablename CONVERT TO CHARACTER SET binary; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8; 
+0

感謝瓊尼可能misundstand我。我想使用java將現有的數據更新爲烏魯木齊市,例如乌é²æœ¨é½å¸。順便說一句,ive試過你給我的tipp,但它仍然無法正確顯示。 – fe3o4

+0

這個問題更容易使用數據庫自​​己的工具來解決:'ALTER TABLE tablename CONVERT TO CHARACTER SET binary'後跟'ALTER TABLE tablename CONVERT TO CHARACTER SET utf8' – Joni

+0

試過了你的tipp。要麼將字符集設置爲utf8,要麼將latin1正確返回一半數據。另一半仍然像乌é²æœ¨é½å¸¸ – fe3o4