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

MySQL 字符集設置全攻略:變量解讀、亂碼成因、編碼轉換實戰與最佳實踐

     編輯:MySQL 綜合教學

MySQL 字符集設置全攻略:變量解讀、亂碼成因、編碼轉換實戰與最佳實踐

字符集問題是 MySQL 亂碼、數據截斷的首因。本文系統講解 4 個核心字符集變量交互流程、亂碼/丟失數據成因、動態/永久設置方法、存量庫表編碼轉換標準流程。

核心變量與轉換流程

SHOW VARIABLES LIKE 'character%';

關鍵變量:

  • character_set_client:客戶端發送編碼,告訴轉換器「我發什麼編碼」。
  • character_set_connection:轉換器將客戶端數據轉為此編碼,再交給 Server。
  • character_set_server:Server 存儲編碼(建庫表默認)。
  • character_set_results:查詢結果輸出編碼。

流程:Client → (client編碼) → 轉換器 → (connection編碼) → Server (server編碼存儲) → 轉換器 → (results編碼) → Client

亂碼與數據丟失成因分析

動態設置與永久配置

會話級:SET NAMES utf8(等同於同時設 client、connection、results)。
永久生效:my.cnf:

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

存量數據庫編碼轉換標準流程(latin1 → gbk/utf8)

  1. 導出表結構:mysqldump -uroot -p --default-character-set=gbk -d DB_NAME > createtable.sql(-d 僅結構,指定連接編碼為目標編碼)。
  2. 修改 SQL 文件:將 CHARSET=latin1 替換為 CHARSET=gbk。
  3. 導出純數據:mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 DB_NAME > data.sql(按原編碼導出,保證中文可見)。
  4. 修改數據文件:將 SET NAMES latin1 改為 SET NAMES gbk。
  5. 創建新庫:CREATE DATABASE DB_NAME DEFAULT CHARSET gbk;
  6. 導入結構:mysql -uroot -p DB_NAME < createtable.sql
  7. 導入數據:mysql -uroot -p DB_NAME < data.sql

參數說明:--quick 流式導出大表;--extended-insert 多值 INSERT 加速導入;--no-create-info 不含建表語句。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因對策
亂碼client 與實際不符(如 Windows CMD 默認 GBK,卻設 utf8)設置 client = 實際終端編碼
亂碼results 與前端頁面編碼不符設置 results = 頁面編碼
數據丟失/截斷connection 編碼 < server 編碼(如 client=utf8, connection=gbk)connection ≥ server,建議均用 utf8