首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL字元集支援全解析:從單一字元集到多層級字元集架構的演進與實務

     編輯:MySQL 資料庫相關知識

MySQL 4.1前僅支援單一伺服器級字元集;4.1起引入**多層級字元集架構**,支援伺服器、資料庫、資料表、欄位、字串常數五個層級獨立設定,並自動處理索引重排序與Unicode支援。

版本演進對比

特性4.1 前4.1+
同時支援字元集數量單一多種
設定層級僅伺服器級伺服器/資料庫/資料表/欄位/常數
修改字元集對索引影響順序錯誤,需手動重建自動重新排序
Unicode支援無UTF-8 / UCS2

4.1 前版本修改字元集的索引重建三法

  1. mysqldump導出 → 清空表 → 導入(索引自動重建),適用所有引擎。
  2. DROP INDEX + CREATE INDEX 或 ALTER TABLE,需知精確索引定義。
  3. MyISAM專用:myisamchk --recover --quick --set-character-set=charset 或 mysqlcheck --repair --quick。

4.1+ 多層級設定語法

-- 伺服器啟動參數
--default-character-set=charset

-- 資料庫級
ALTER DATABASE db_name DEFAULT CHARACTER SET charset;
CREATE DATABASE db_name DEFAULT CHARACTER SET charset;

-- 資料表級
CREATE TABLE t (...) CHARACTER SET = charset;
ALTER TABLE t DEFAULT CHARACTER SET charset;

-- 欄位級(僅 CHAR/VARCHAR/TEXT 非 BINARY)
CREATE TABLE t (c VARCHAR(50) CHARACTER SET charset);

-- 字串常數轉換
_charset 'string'        -- 例:_utf8 'MySQL'
CONVERT(str USING charset) -- 適用十六進位、運算式等

新增功能與工具

  • COLLATE子句:SELECT * FROM t ORDER BY c COLLATE utf8_general_ci 指定排序規則。
  • SHOW CHARACTER SET:列出支援字元集清單。
  • 字元集查詢函數:CHARSET(str) 回傳字串/欄位/運算式的字元集。
  • 層級查詢指令:
    • 資料庫:SHOW CREATE DATABASE db_name
    • 資料表:SHOW CREATE TABLE t / SHOW TABLE STATUS LIKE 't'
    • 欄位:DESCRIBE t / SHOW COLUMNS FROM t / SHOW CREATE TABLE t

Unicode 支援細節

  • UTF-8:可變長 1-4 bytes/字元,相容ASCII,儲存效率高。
  • UCS-2:固定 2 bytes/字元,適合頻繁字元運算場景。

尚不支援項目

  1. 單一字串混用多種字元集字元。
  2. 單一欄位混用多種字元集。

實務建議

  • 新專案**統一採用 UTF-8**(utf8mb4支援完整Unicode含Emoji)。
  • 連線字串指定 characterEncoding=utf8 / charset=utf8mb4。
  • 避免在同一資料庫混用字元集,除非有極強業務理由且做好轉換層。

多層級字元集架構讓MySQL真正具備國際化部署能力,理解層級繼承規則與自動轉換機制,是避免亂碼與排序錯誤的關鍵。

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