1. 程式人生 > 資料庫 >JDBC連線mysql處理中文時亂碼解決辦法詳解

JDBC連線mysql處理中文時亂碼解決辦法詳解

JDBC連線mysql處理中文時亂碼解決辦法詳解

近日,整合的專案需要跟一個比較老版本的mysql伺服器連線,使用navicat檢視,發現此mysql伺服器貌似沒有設定預設編碼,而且從操作此mysql的部分php檔案看,應該是使用的gb2312的編碼,但是,直接使用jdbc操作,從庫中讀取出來的中文全都是亂碼。

一開始,使用類似entity.setDepartName(new String(rs.getString("hg").getBytes("gbk"),"utf-8"));的方式,試圖進行強制的編碼轉換,結果失敗了,因為,無論採用何種方式,轉出來的字元總是各種各樣的亂碼,只是每次亂的方式都不一樣。比較鬱悶。而且,此專案由於使用的其他的產品,無法在其中再加額外的類似過濾器之類的東西,所以這個問題不是很好處理。

使用navicat連線查詢,沒有問題,因此,試著將某個表匯出sql,檢視DDL中是否有關於編碼的設定,結果讓我很失望,編碼這一塊直接沒寫。於是,將匯出的sql檔案修改副檔名為html,使用IE開啟,發現沒有亂碼,檢視此時的編碼格式果然是“gb2312”,但是,使用java強制的轉碼已無濟於事。怎麼辦呢?

而且,此專案已執行多年,後期維護有些缺乏,my.ini檔案也更是無法檢視並修改的。

突然想起,mysql連線的時候可以加上引數,並且有些引數是指定編碼的,這樣是不是可以解決問題呢?

於是修改連線字串(原值為:url="jdbc:mysql://192.168.18.254:3306/web_oa)為:

url="jdbc:mysql://192.168.18.254:3306/web_oa?useUnicode=true&characterEncoding=gbk"

重啟應用,檢視,OK!中文很正常。

問題解決。

這種方式其實是在連線時指定使用gbk的編碼格式,從而避免客戶端與服務端各自使用自己預設的編碼格式互動,只要配置合適,不會出現亂碼問題。

如有疑問請留言或者到本站社群交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支援!