標籤:
今天使用hibernate儲存資料到mysql中,發現出現亂碼問題,經過檢查,發現接收到的是正確中文,說明用戶端瀏覽器將中文編碼發送到伺服器過程中無亂碼問題,後來尋找資料:
首先要告訴資料庫要插入的字串的字元集,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 檔案裡面的話 “&” 要改成 “&”。
完整的寫法:jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8
在hibernate的設定檔裡面修改代碼如下:
<property name="connection.url"> jdbc:mysql://127.0.0.1:3306/hello?useUnicode=true&characterEncoding=UTF-8 </property>
解決hibernate儲存資料到mysql中出現亂碼問題