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

MySQL 4.1.7 字元集問題完整解析:character_set_* 變數、JDBC 自動偵測、Console 亂碼修正

     編輯:MySQL 資料庫相關知識

MySQL 4.1 引入字元集系統變數,導致 JDBC 連線正常但 Console 顯示亂碼的常見問題。本文詳細說明變數含義、JDBC 3.0.16+ 自動偵測機制、Console 啟動參數修正與最佳實踐。

環境

  • MySQL 4.1.7,安裝指定 character-set=gbk
  • Connector/J 3.1.7
  • Windows 平台

問題現象

  • JDBC 讀寫中文正常 (URL 無 useUnicode/characterEncoding)
  • MySQL Console 查詢中文顯示 ???

根因:字元集系統變數不一致

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |  -- 客戶端發送編碼
| character_set_connection | latin1 |  -- 連線轉換編碼
| character_set_database   | gbk    |  -- 預設資料庫編碼
| character_set_results    | latin1 |  -- 結果集回傳編碼
| character_set_server     | gbk    |  -- 伺服器預設編碼
| character_set_system     | utf8   |  -- 系統識別符編碼 (固定)
+--------------------------+--------+

Console 連線時 client/connection/results 為 latin1,導致 GBK 資料以 Latin1 解碼 → 亂碼。

解決方案一:Console 啟動指定預設字元集

mysql -u user -p --default-character-set=gbk database_name

連線後三變數變為 gbk,Console 顯示正常。

解決方案二:JDBC 3.0.16+ 自動偵測 (無需 URL 參數)

  • 驅動連線時讀取 character_set_server (此處為 gbk)
  • 自動將 Java Unicode String 轉為 GBK 發送
  • 不需 在 URL 加 useUnicode=true&characterEncoding=GBK

版本對應關鍵點

最佳實踐建議

  1. 統一使用 utf8mb4:資料庫、表、欄位、連線、應用層全鏈路
  2. my.cnf 設定:
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    [client]
    default-character-set = utf8mb4
    
  3. JDBC URL:jdbc:mysql://host:3306/db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4
  4. Console:mysql --default-character-set=utf8mb4

結語

MySQL 4.1 字元集變數 (client/connection/results/database/server/system) 是亂碼根源。JDBC 3.0.16+ 透過讀取 character_set_server 實現自動偵測。現代專案全鏈路 utf8mb4 一勞永逸。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
MySQLConnector/J行為
4.1+3.0.16+自動偵測 server 字元集,URL 參數可省略
4.0/4.1 早期3.0.x 早期需手動指定 useUnicode=true&characterEncoding=GBK
5.0+5.1+支援 utf8mb4,建議統一 UTF-8