jdbc串連mysql 時的中文亂碼問題解決

來源:互聯網
上載者:User

標籤:

在用 jdbc 向 mysql 資料庫插入中文時出現了亂碼,嚴格來說是通過 Hibernate。記錄下搜尋和查文檔以後找到的解決辦法。

  • 首先要告訴資料庫要插入的字串使用的字元集,mysql 預設使用的字元集是 latin1。我要儲存的字串是 UTF-8 編碼的(字元集是 Unicode),所以包含這個欄位的表應該使用 UTF-8 編碼。這裡有幾種解決辦法。

     

    1. 在建立資料庫的時候指定資料庫的字元集編碼,這樣,這個資料庫的所有表都會預設使用資料庫的字元集編碼。如 create database foo charset utf8;
    2. 在建表的時候指定字元集編碼。如 create table foo (id char(20)) charset utf8;
    3. 指定某一列使用的字元集編碼。如create table foo (id char(20) charset utf8);

    如果你有需要的話還可以指定字元排序的規則,也就是指定 collation,如 create database foo charset utf8 collate utf8_general_ci;,同樣也可以指定單獨的表、列使用的 collation 規則。

  • 然後在使用 jdbc 串連資料庫的時候要告知 jdbc 使用什麼字元集編碼來跟伺服器通訊。很簡單,只需要在 jdbc 指定資料庫路徑時做一點修改就可以了。比如,jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8。注意如果在 XML 檔案裡面的話 “&” 要改成 “&”。

如果你使用的是 gbk 編碼的話把上面所有提到 utf8 的地方改成 gbk 應該就可以了,只要伺服器和用戶端使用的字元集編碼統一就可以了。

mysql 命令列用戶端預設使用的字元集也是 latin1,如果你通過這個來插入中文的話也會出現亂碼的情況。解決的辦法是執行語句 set names ‘utf8‘ 來告訴伺服器使用 UTF-8 編碼來和用戶端通訊。你也可以使用 set charset ‘utf8‘,它和 set names 區別只在於 collation 上。set names 和 set charset 都相當於執行了三條語句,具體的內容可以去看 mysql 文檔 10.4 節。我想這個方法在使用 jdbc 的時候也是可以的,所以如果 jdbc 的指定資料庫地址中沒有告知使用的字元集編碼的話可以通過執行上面的語句來達到相同的效果。

先說一下我的環境,windows XP,mysql5.0安裝版,rails1.2.3。

試過的解決方案有3種:

1。重新利用 MySQL Server instance Config Wizard嚮導,重新Reconfigure Instance。改編碼為utf8

2。修改MySQL檔案夾下的my.ini檔案。如下:

 

[mysql]

default-character-set=utf8

[mysqld]
default-character-set=utf8

3。SET character_set_client =utf8;
      SET character_set_results = utf8;
      SET character_set_connection = utf8;

可輸入mysql>SHOW VARIABLES LIKE ‘%character%‘ ;命令查看效果。

以上方式前2種其實是一個原理,看你習慣怎麼改罷了,而設定的值正是中的character_set_database和character_set_server.

這些都是網上一搜一大片的處理方式,在這裡也做一個總結。但我通過以上方式去做了以後,非但亂碼問題沒有解決,而且資料庫表中再無法插入中文。

jdbc串連mysql 時的中文亂碼問題解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.