首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 字符編碼設定完全指南:徹底解決亂碼問題

     編輯:MySQL 綜合教學

問題背景

在 MySQL 中插入中文資料時經常出現「???」亂碼,網路上流傳的許多方案對特定版本不生效。本文針對 MySQL 5.5.40 版本,提供經實測驗證的完整配置方案。

核心配置:修改 my.cnf (或 my.ini)

在配置檔的對應區段加入以下設定,確保客戶端、連線、伺服器端編碼一致:

[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

參數說明

  • character-set-server:伺服器預設字符集,決定建立資料庫/表/欄位時的預設編碼。
  • collation-server:伺服器預設校對規則,utf8_unicode_ci 基於 Unicode 標準排序,準確度優於 utf8_general_ci。
  • init-connect:客戶端連線時自動執行 SET NAMES utf8,確保連線層編碼正確 (需注意:root 用戶連線不會執行此指令)。
  • [client] / [mysql] 區段:指定 mysql 等客戶端工具的預設編碼,避免交互式操作亂碼。

驗證配置生效

重啟 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;

常見誤區提醒

  1. 僅修改資料庫編碼不足:必須同步設定伺服器、連線、客戶端編碼。
  2. utf8 vs utf8mb4:MySQL 5.5.3+ 建議使用 utf8mb4 完整支援 Emoji 及補充字符;本文針對 5.5.40 環境使用 utf8 (實為 utf8mb3)。
  3. 應用程式層:JDBC 連線字串需加 ?characterEncoding=utf8,Python 需在連線時指定 charset='utf8'。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved