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

MySQL 5 中文亂碼徹底解決:JDBC 連線參數與字元集配置指南

     編輯:MySQL 資料庫相關知識

現象

Java 程式寫入中文到 MySQL 5 顯示亂碼,但 MySQL Admin / EMS 等工具寫入正常,程式讀取也正常。

根因分析

JDBC URL 缺少字元集參數,導致驅動程式無法告知伺服器客戶端編碼:

jdbc:mysql://10.4.2.52:3306/srx?useUnicode=true&characterEncoding=utf-8

若缺少 useUnicode=true 與 characterEncoding=utf-8,伺服器預設用 latin1 (iso-8859-1) 解析 SQL,中文無法正確還原。

驗證方法:查詢連線字元集變數

public void select() throws SQLException {
    ResultSet rs = conn.createStatement().executeQuery("SHOW VARIABLES LIKE 'character_set_%'");
    while(rs.next()){
        System.out.println(rs.getString(1) + "," + rs.getString(2));
    }
    rs.close();
}

未配置字元集時輸出

character_set_client,latin1
character_set_connection,latin1
character_set_database,utf8
character_set_filesystem,binary
character_set_results,latin1
character_set_server,latin1
character_set_system,utf8

character_set_client=latin1 證實客戶端編碼被誤判為 latin1。

配置正確參數後輸出

character_set_client,utf8
character_set_connection,utf8
character_set_database,utf8
character_set_filesystem,binary
character_set_results,utf8
character_set_server,latin1
character_set_system,utf8

character_set_client=utf8 確認客戶端編碼正確,SQL 以 UTF-8 封裝傳輸,伺服器正確解析。

完整解決方案

1. JDBC URL 必備參數

jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false

2. 伺服器端 my.cnf 統一字元集

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

3. 表/欄位層級指定

CREATE TABLE t (c VARCHAR(100)) CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

常見編碼對照

參數值適用場景
utf-8 / utf8mb4通用、支援 Emoji、推薦
gbk舊系統相容、中文環境
gb2312極舊系統、不支援生僻字
latin1二進制透傳、不建議中文

避坑清單

  • ✅ JDBC URL 必須包含 useUnicode=true&characterEncoding=utf-8
  • ✅ 伺服器/資料庫/表/欄位/連線五層字元集統一
  • ✅ 使用 utf8mb4 而非 utf8(後者僅 3 字節,不支援 Emoji)
  • ✅ 連線池初始化 SQL 設定 SET NAMES utf8mb4
  • ✅ 終端機/IDE/檔案編碼均為 UTF-8
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved