在 MySQL 中插入中文資料時經常出現「???」亂碼,網路上流傳的許多方案對特定版本不生效。本文針對 MySQL 5.5.40 版本,提供經實測驗證的完整配置方案。
在配置檔的對應區段加入以下設定,確保客戶端、連線、伺服器端編碼一致:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect = 'SET NAMES utf8' character-set-server = utf8
utf8_unicode_ci 基於 Unicode 標準排序,準確度優於 utf8_general_ci。SET NAMES utf8,確保連線層編碼正確 (需注意:root 用戶連線不會執行此指令)。重啟 MySQL 服務後,進入客戶端執行:
SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%';
確認 character_set_server、character_set_database、character_set_connection、character_set_results、character_set_client 均為 utf8,且校對規則為 utf8_unicode_ci。
若需在特定層級覆蓋預設值:
-- 建立資料庫時指定 CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; -- 建立表時指定 CREATE TABLE t1 (c1 VARCHAR(50)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; -- 修改既有表/欄位編碼 (需注意資料轉換風險) ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
utf8mb4 完整支援 Emoji 及補充字符;本文針對 5.5.40 環境使用 utf8 (實為 utf8mb3)。?characterEncoding=utf8,Python 需在連線時指定 charset='utf8'。