2013-07-31 17 views
0

從我的應用程序插入一些中文字符時,它們會以'???'的形式寫入數據庫。不用說,它可以在內置的命令行mysql客戶端中正常工作。MySQL - 問號

連接字符串:

--user-DB-URI = JDBC:MySQL的://本地主機/ tigasedb用戶= tigase_user &密碼= tigase_passwd &了useUnicode =真&的characterEncoding = UTF8 & noAccessToProcedureBodies =真

代碼:

try { 
      conn_valid_st.setQueryTimeout(query_timeout); 
      st = conn.prepareStatement("SET character_set_client = utf8"); 
      st.execute(); 
      st.close(); 
      st = conn.prepareStatement("SET character_set_connection = utf8"); 
      st.execute(); 
      st.close(); 
      st = conn.prepareStatement("SET character_set_results = utf8"); 
      st.execute(); 
      st.close(); 
      st = conn.prepareStatement("SET collation_connection = utf8_general_ci"); 
      st.execute(); 
      st.close(); 
      st = conn.prepareStatement("SET NAMES utf8"); 
      st.execute(); 
      st.close(); 
      st = conn.prepareStatement("SET CHARACTER SET utf8"); 
      st.execute(); 
      st.close(); 
     } catch (SQLException ex) { 
      // Ignore for now, it seems that PostgreSQL does not support this method 
      // call yet 
      if (null != st) 
       st.close(); 

      log.log(Level.WARNING, "DB server said: {0}", ex.toString()); 
     } 

這是什麼讓我無法迴避?

編輯:

創建表... ENGINE = InnoDB的默認字符集UTF8整理 utf8_unicode_ci ROW_FORMAT = DYNAMIC;

插入字符:在健身房

驗證是通過內置的命令行mysql客戶端來完成。

編輯: http://docs.oracle.com/cd/E17952_01/refman-5.0-en/connector-j-reference-charsets.html沒有幫助

檢查系統屬性 「的file.encoding」 的價值。如果這不是 「UTF-8」,那麼無論何時將字節解碼爲字符,都需要明確指定「UTF-8」作爲字符 編碼。例如,當您調用帶有byte []的字符串構造函數的 時,或者使用InputStreamReader時使用 。

Problems reading/writing UTF-8 data in MySQL from Java using JDBC connector 5.1 - 沒有幫助

聲明的字符串變量在存儲過程中爲_loc VARCHAR(128) CHARSET utf8 - 沒有幫助

+0

什麼是您的數據庫的字符集和整理? – f1sh

+0

你插入了哪些字符?你如何驗證數據庫存儲的內容?你使用哪種字符集作爲列? – Joni

+0

問題已編輯! – kellogs

回答

0

你的數據庫表列應以適當的字符集和校對規則創建。在創建或更改表可以定義theit:

col_name {CHAR | VARCHAR | TEXT} (col_length) 
    [CHARACTER SET charset_name] 
    [COLLATE collation_name] 

下面是MySQL數據庫的鏈接,以幫助您瞭解更多相關信息:

http://dev.mysql.com/doc/refman/5.0/en/charset-column.html

+0

請重新閱讀;它一切正常,從標準客戶端 – kellogs

+0

@kellogs所以你的意思是說它被正確保存在分貝?那你在哪裏看到???分數 –

0

它正常工作與當前的5.1.26版本的驅動程序:

createTable("testBugF1", "(`str` varchar(10)) default character set utf8 collate utf8_unicode_ci "); 
String str = "在健身房"; 

Properties props = new Properties(); 
props.put("characterEncoding", "utf8"); 
Connection c = getConnectionWithProps(props); 

this.stmt = c.createStatement(); 
this.stmt.executeUpdate("insert into testBugF1 values (\""+ str +"\")"); 
this.rs = this.stmt.executeQuery("select * from testBugF1"); 
assertTrue(this.rs.next()); 
String res = this.rs.getString(1); 
System.out.println(res); 
assertEquals(str, res); 

您是否使用舊驅動程序?你如何插入字符?