2013-02-06 28 views
1

我正在使用mysql dbms來存儲來自維基百科的頁面。我設置的字符集編碼utf-8(維基百科編碼)在my.cnf文件與指令:MySQL不能正確存儲一些UTF8字符

[mysqld] 
character_set_server = utf8 

並與'chararacter set utf8'屬性定義創建我的數據庫。

我也改變了字符集編碼的啓動mysqld的客戶端通過:

  • 初始化我的JDBC驅動程序時,插入'charSet=utf8'財產。
  • 做一個查詢'set names utf8'

但是我注意到,MySQL服務器替換其他一些字符。

例如,它用a代替á

UPDATE

我已經運行,確保雙方character_set_clientcharacter_set_setutf8命令show variables like '%char%'

如何在db中存儲正確的字符?謝謝!

+0

[1]你正在使用哪個驅動程序? [2]在設置參數以存儲到數據庫之前,您是否正在使用'new String([String Object] .getBytes(),「UTF-8」)' –

+0

[1]我正在使用MySQL Connector/J。 [2]我試過'新的字符串([String Object] .getBytes(),Charset.forName(「UTF-8」))',但它不起作用。 – user278064

+1

你可以從MySQL Workbench或類似的工具中插入一個UTF-8文本嗎?如果是這樣,那麼正如Eran指出的那樣,這可能與您的連接URL設置有關。 – melihcelik

回答

2

嘗試指定在DB URL編碼:關於我的答案

url="jdbc:mysql://localhost:port/DBNAME?characterEncoding=UTF-8" 

這裏的一些信息:

從MySQL文檔(http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-charsets.html)採取了以下:

從JDBC驅動程序發送到服務器的所有字符串都會自動從原生Java Unicode格式轉換爲 到客戶端字符 編碼,包括所有使用Statement.execute()發送的查詢, Statement.executeUpdate(),Statement.executeQuery()以及所有 PreparedStatement和CallableStatement參數,排除參數 使用setBytes(),setBinaryStream() , setAsciiStream(),setUnicodeStream()和setBlob()。

設置字符客戶 和服務器之間的編碼
字符編碼是在連接時自動檢測。您可以使用服務器 版本4.1.0及更高版本的character_set_server在服務器上指定 編碼。驅動程序自動使用服務器指定的編碼 。要覆蓋客戶端自動檢測到的 編碼,請使用用於連接到服務器的 URL中的characterEncoding屬性。若要允許從客戶端發送多個字符集 ,請使用UTF-8編碼(配置utf8作爲默認服務器字符集的 或配置JDBC驅動程序的 )以通過characterEncoding 屬性配置爲使用UTF-8。

幾個月前我遇到過類似的問題。我檢查了我的MySQL上的character_set_server的默認值(使用「mysqld --verbose -help」命令)。 這是latin1。

相關問題