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

MySQL 字元集知識體系總結:編碼原理、系統變數、轉換流程與實戰排查

     編輯:MySQL 綜合教學

常見字元集與編碼方式

字元集特點編碼方式
ASCII羅馬字母表1 字節,低 7 位,高位 0
LATIN1ASCII 擴展1 字節,啟用高位
GB2312簡體中文雙字節
GBKGB2312 擴展單/雙字節混合,00-7F 兼容 ASCII
GB18030國家標準多字節,涵蓋所有中文
Unicode國際標準UTF-8 (1-4 字節), UTF-16 (2 字節), UTF-32 (4 字節)

MySQL 字元集系統變數對照表

變數名含義
character_set_server預設內部操作字元集
character_set_client客戶端來源資料字元集
character_set_connection連接層字元集
character_set_results查詢結果字元集
character_set_database當前選中資料庫預設字元集
character_set_system系統元資料字元集

字元集轉換三步驟

  1. client → connection
  2. connection → 表欄位字元集(欄位 > 表 > 庫 > server)
  3. 表欄位字元集 → results

實戰場景模擬

場景 A:客戶端 UTF-8,client/connection/表皆 GBK

無轉換,但實際儲存為 UTF-8 位元組流(6 字節/漢字),讀取反向還原,顯示正常。

場景 B:改 client 為 UTF-8,查詢結果變「灏忔槑」

Server 將 GBK 位元組流誤判為 UTF-8 解碼,產生錯誤字元。

場景 C:再改 SecureCRT 為 GBK,結果變「鐏忓繑妲」

終端模擬器以 GBK 顯示 UTF-8 位元組流,雙重誤解碼。

常用 SQL 指令

-- 查看設定
SHOW VARIABLES LIKE '%character%';

-- 設定連線字元集
SET NAMES utf8;  -- 等同設定 client、connection、results

-- 修改庫字元集(僅影響後續建表)
ALTER DATABASE db_name CHARACTER SET utf8;

-- 修改表字元集(僅影響後續新增欄位)
ALTER TABLE tbl_name CHARACTER SET utf8;

-- 修改表字元集並轉換既有資料
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

-- 修改欄位字元集
ALTER TABLE tbl_name MODIFY COLUMN col_name VARCHAR(100) CHARACTER SET utf8;

-- 查看欄位實際位元組
SELECT HEX(col_name), LENGTH(col_name) FROM tbl_name;

MySQL 預設字元集 latin1

  • 編譯時預設 latin1
  • 安裝可透過 my.ini 覆蓋
  • 啟動參數可再覆蓋
  • 安裝選「多語言支援」會自動設為 UTF-8

關鍵點:latin1 表若 client/connection/表統一設為 latin1,寫入 UTF-8 位元組流並不轉碼,讀取時終端以 UTF-8 解碼可正常顯示。但一旦環節不一致即產生亂碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved