MySQL 4.1前僅支援單一伺服器級字元集;4.1起引入**多層級字元集架構**,支援伺服器、資料庫、資料表、欄位、字串常數五個層級獨立設定,並自動處理索引重排序與Unicode支援。
| 特性 | 4.1 前 | 4.1+ |
|---|---|---|
| 同時支援字元集數量 | 單一 | 多種 |
| 設定層級 | 僅伺服器級 | 伺服器/資料庫/資料表/欄位/常數 |
| 修改字元集對索引影響 | 順序錯誤,需手動重建 | 自動重新排序 |
| Unicode支援 | 無 | UTF-8 / UCS2 |
mysqldump導出 → 清空表 → 導入(索引自動重建),適用所有引擎。DROP INDEX + CREATE INDEX 或 ALTER TABLE,需知精確索引定義。myisamchk --recover --quick --set-character-set=charset 或 mysqlcheck --repair --quick。-- 伺服器啟動參數 --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_nameSHOW CREATE TABLE t / SHOW TABLE STATUS LIKE 't'DESCRIBE t / SHOW COLUMNS FROM t / SHOW CREATE TABLE tutf8mb4支援完整Unicode含Emoji)。characterEncoding=utf8 / charset=utf8mb4。多層級字元集架構讓MySQL真正具備國際化部署能力,理解層級繼承規則與自動轉換機制,是避免亂碼與排序錯誤的關鍵。