首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 Java 程式連接 MySQL 時中文亂碼問題的完整指南

     編輯:MySQL 資料庫相關知識

在 Java 應用程式開發中,連接 MySQL 資料庫時遇到中文亂碼是常見的棘手問題。這類問題通常源於字符集配置不一致,涉及資料庫伺服器、連接層、客戶端工具等多個環節。本文將系統梳理解決方案,從配置檔修改到程式碼層面的處理,助你徹底根治亂碼困擾。

一、排查資料庫字符集現狀

首先在 MySQL 客戶端執行以下指令,檢視當前字符集配置:

SHOW VARIABLES LIKE 'character%';

若輸出結果中 character_set_client、character_set_connection、character_set_results 等關鍵變數非 utf8(或 utf8mb4),則會導致中文讀寫異常。Windows 環境下可修改 my.ini,Linux 下對應 my.cnf。

二、修改 MySQL 配置檔(徹底解決方案)

編輯 my.cnf(或 my.ini),在三個區段分別加入字符集設定,注意區段名稱不可寫錯:

1. [client] 區段

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8

2. [mysqld] 區段(伺服器端核心設定)

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server = utf8

3. [mysql] 區段(客戶端工具預設)

[mysql]
no-auto-rehash
default-character-set = utf8

關鍵提醒: [mysqld](伺服器進程)與 [mysql](命令列客戶端)是兩個不同區段,網路上常見教程混淆兩者,導致配置不生效。修改完成後執行 service mysql restart 重啟服務。

三、驗證配置生效

重啟後再次執行 SHOW VARIABLES LIKE 'character%';,確認所有 character_set_* 變數均顯示 utf8,即表示伺服器層面已正確配置。

四、Java 連接層面的兜底處理

即使伺服器配置正確,部分 JDBC 驅動版本或連接池仍可能忽略伺服器端字符集。最穩妥的做法是在建立連接後、執行查詢前,主動發送指令:

SET NAMES 'utf8';

等同於以下三條指令的組合:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

程式碼範例(JDBC)

Connection conn = DriverManager.getConnection(url, user, pass);
try (Statement stmt = conn.createStatement()) {
    stmt.execute("SET NAMES 'utf8'"); // 必須在查詢前執行
    // 後續查詢操作...
}

連接字串參數法(推薦)

在 JDBC URL 中顯式指定字符編碼,避免手動執行 SQL:

jdbc:mysql://host:3306/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=true

五、常見坑點總結

  • utf8 vs utf8mb4: MySQL 5.5.3+ 建議使用 utf8mb4 完整支援 Emoji 及生僻字,配置時將上述 utf8 替換為 utf8mb4 即可。
  • 資料表/欄位字符集: 確認 CREATE TABLE 及 ALTER TABLE 指定 CHARSET=utf8mb4,欄位層級亦可單獨設定。
  • IDE/終端機編碼: 開發工具、終端機、檔案儲存編碼需統一為 UTF-8,否則源頭即錯誤。

遵循「伺服器配置為主,連接層兜底」原則,配合統一編碼環境,即可徹底解決 Java 連接 MySQL 中文亂碼問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved