2015-02-06 82 views
0

我使用的是MySQL數據庫和插入這樣的:當我插入如何保存特殊字符在數據庫

try (Connection connection = DbConnector.connectToDb(); 
      PreparedStatement stm = connection.prepareStatement("INSERT INTO Country (name) VALUES (?)")) { 
      stm.setString(1, name); 
      if (stm.executeUpdate() > 0) { 
       result = true; 
      } 
     } catch (Exception e) { 
      logStackTrace(e); 
     } 

現在:België屬於它在數據庫保存在一個奇怪的方式E不是保存。我該如何解決這個問題?

編輯:

我只是通過改變表:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

但仍當我添加一個新的沒有在網頁上正確顯示它。

+1

在你的db,你的源代碼和你的機器中使用正確的編碼 – Steffen 2015-02-06 08:32:48

+0

數據庫中的字段類型是什麼?你如何驗證在數據庫調用之前你已經獲得了正確的數據?你如何驗證它沒有正確存儲?我並不是說這不是問題,但我們很難在沒有更多信息的情況下提供幫助。 – 2015-02-06 08:34:42

+0

字段類型是一個字符串。我通過我的網頁和mysqlworkbench進行了驗證。 – user1007522 2015-02-06 08:41:36

回答

1

數據庫中有2點要檢查以正確設置UTF-8字符集。

數據庫級

這是通過創建它獲得:

CREATE DATABASE 'db' CHARACTER SET 'utf8'; 

表級

所有的表需要在UTF-8還(這似乎是你的情況)

CREATE TABLE `Table1` (
    [...] 
) DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 

的重要組成部分,是默認字符集= UTF8 COLLATE = utf8_general_ci

最後,如果你的代碼不正確處理UTF-8,你可以迫使你的JVM通過在啓動時更改設置使用utf8編碼:

java -Dfile.encoding=UTF-8 [...] 

,或者使用改變環境變量

"**JAVA_TOOLS_OPTIONS**" to -Dfile.encoding="UTF-8" 

或編程:

System.setProperty("file.encoding" , "UTF-8"); 

(最後一個可能沒有慾望的效果,因爲在JVM上的高速緩存啓動時默認的字符編碼的值)

希望這有助於。

+0

謝謝,我只是做了這個ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;但仍然當我添加一個新的它不好顯示。我是否需要設置默認或其他? – user1007522 2015-02-06 08:39:13

+1

確保你的頁面編碼是相同的,並檢查這個http://balusc.blogspot.in/2009/05/unicode-how-to-get-characters-right.html,這也是https://coderwall.com/p/rvduyw/jdbc-inserting-unicode-utf-8 -character-into-mysql – 2015-02-06 08:42:40

+0

謝謝你:-)這個技巧。 – user1007522 2015-02-06 10:54:24