MySQL 4.1 引入字元集系統變數,導致 JDBC 連線正常但 Console 顯示亂碼的常見問題。本文詳細說明變數含義、JDBC 3.0.16+ 自動偵測機制、Console 啟動參數修正與最佳實踐。
character-set=gbkuseUnicode/characterEncoding)???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 解碼 → 亂碼。
mysql -u user -p --default-character-set=gbk database_name
連線後三變數變為 gbk,Console 顯示正常。
character_set_server (此處為 gbk)useUnicode=true&characterEncoding=GBK| MySQL | Connector/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 |