標準建庫語句
CREATE DATABASE IF NOT EXISTS `your_db_name`
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
參數詳解
| 子句 | 推薦值 | 說明 |
CHARACTER SET / CHARSET | utf8mb4 | 真正的 UTF-8 (4 字節),支持 Emoji、生僻字。舊版 utf8 僅 3 字節,不支持補平面字符 |
COLLATE | utf8mb4_general_ci 或 utf8mb4_unicode_ci | _ci = Case Insensitive (大小寫不敏感)。unicode_ci 排序更準確 (遵循 UCA),general_ci 性能略高。新版默認 utf8mb4_0900_ai_ci (MySQL 8.0) |
常見誤區與避坑
- 使用
utf8 而非 utf8mb4:導致存儲 Emoji (😀) 或生僻字 (𠮷) 報錯 Incorrect string value 或截斷。
- 未指定 COLLATE:依賴服務器默認,跨環境遷移時可能導致排序/比較行為不一致。
- 表/列級字符集與庫不一致:建表時未顯式指定,繼承庫默認;若庫為
latin1 會產生亂碼。建議建庫、建表、建列、連接參數四層統一聲明 utf8mb4。
- JDBC/連接池未設置
characterEncoding=utf8mb4:應用層編碼與數據庫不一致,導致讀寫亂碼。
驗證字符集