字符集定義了符號集合與編碼規則。無論 Oracle 或 MySQL,資料庫建立初期若未正確選擇字符集,後期更換代價高且風險大。建議在專案啟動階段依需求選定合適字符集,避免後續調整。
MySQL 支援多字符集共存:同一伺服器、資料庫、甚至同一張表的不同欄位可指定不同字符集,靈活度遠超 Oracle 等僅允許單一資料庫單一字符集的系統。MySQL 將「字符集」與「校對規則」分離:字符集決定儲存方式,校對規則決定比較排序規則,呈一對多關係(30+ 字符集對應 70+ 校對規則)。可用 SHOW CHARACTER SET、SHOW COLLATION LIKE 'utf8%' 查看支援清單。
在滿足業務前提下,優先選擇較小字符集:節省儲存空間、降低網路傳輸量、間接提升效能。常見中文環境選型:
| 層級 | 生效範圍 | 配置方式 |
|---|---|---|
| 伺服器級 | 全域預設 | my.cnf 設 default-character-set、啟動參數 --default-character-set、編譯參數 --with-charset |
| 資料庫級 | 該庫新建表預設 | CREATE DATABASE ... CHARACTER SET utf8 COLLATE utf8_general_ci |
| 表級 | 該表新建欄位預設 | CREATE TABLE ... CHARACTER SET utf8 |
| 欄位級 | 該欄位實際編碼 | col_name VARCHAR(100) CHARACTER SET utf8 |
若僅指定字符集未指定校對規則,將使用該字符集的預設校對規則。可用 SHOW VARIABLES LIKE 'character_set_server' 查看當前伺服器設定。