首頁 > Java > java教程 > 主體

Java中jdbc連接資料庫出現中文亂碼問題的解決方法

WBOY
發布: 2023-04-26 14:04:08
轉載
1975 人瀏覽過

一、使用jdbc連接資料庫,插入資料庫時,資料裡的資料顯示亂碼,為" ??? "

兩個解決方案:

1、修改服務端的mysql設定文件,編輯my.cnf文件,在[mysqld]下新增一行character_set_server = utf8,然後重新啟動mysql服務

2、使用jdbc連線時,指定正確的編碼,jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8

二、為什麼配置了character_set_server = utf8,jdbc連接時就可以不指定編碼

查閱官方文檔,jdbc連接資料庫時,會先查詢服務端的character_set_server值,再確定連線時所使用的編碼。若要覆寫客戶端的自動偵測編碼功能,可以使用characterEncoding屬性

文件位址:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets .html

三、MYSQL的字元處理機制是怎麼樣的,為什麼jdbc不指定編碼或服務端不設定character_set_server=utf8會導致亂碼

#先查看下MYSQL的字元集

Java中jdbc連接資料庫出現中文亂碼問題的解決方法

解釋下這幾個參數:

character_set_client:客戶端來源資料使用的字元集
character_set_connection:連接層字元集
character_set_database:目前選取資料庫的預設字元集
character_set_filesystem:把os上檔案名稱轉換成此字元集,預設binary是不做任何轉換的
character_set_results:查詢結果字元集
character_set_server:預設的內部操作字元集
character_set_system:系統元資料字元集
character_sets_dir:字元集的路徑

#修改服務端的mysql設定文件,編輯my.cnf文件,在[mysqld]下方新增一行character_set_server = utf8,然後重新啟動mysql服務,再去查詢字元集:

Java中jdbc連接資料庫出現中文亂碼問題的解決方法

然後了解下字元集轉換流程:

插入資料:

服務端將資料由客戶端(character_set_client)字元集轉成character_set_connection,然後將character_set_connection字元集轉成對應的字元集儲存到磁碟中,這個對應的字元集會依照下列優先順序來判斷:

1、建立表格時設定的字元集

2、建立庫時所設定的字元集

3、character_set_database字元集

4、character_set_server字元集

查詢資料:

服務端將資料由儲存在磁碟中的字元集,轉換成character_set_results字元集,傳回給客戶端

然後分析下

1、jdbc不設定characterEncoding=utf8,服務端character_set_server為latin1,jdbc以latin1字元集連接資料庫,資料庫服務端將latin1轉成utf8然後儲存到磁碟(因為character_set_connection和建立表指定的字元集都是utf8),這時就造成了亂碼

2、jdbc不設定characterEncoding=utf8,服務端character_set_server為utf8,或是jdbc設定characterEncoding=utf8,jdbc都以utf8字元集連接資料庫,資料庫服務端以utf8儲存至磁碟,這時資料就是正常的

#

以上是Java中jdbc連接資料庫出現中文亂碼問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板