在 MySQL Query Browser 等 GUI 工具建立含 TEXT/BLOB 欄位的表時失敗:
mysql error 1101: blob/text column can't have a default value
BLOB、TEXT、GEOMETRY、JSON (5.7 前) 類型不允許指定 DEFAULT 值 (除非 MySQL 8.0.13+ 支援 DEFAULT 'text' 但極少用)。DEFAULT NULL 或 DEFAULT '',導致違反規範。sql_mode 註釋掉 STRICT_TRANS_TABLES 並重啟服務無效,此為硬性語法限制,非嚴格模式可繞過。
mysql> CREATE TABLE clob_test (
id INT PRIMARY KEY,
big_text TEXT NOT NULL
);
Query OK, 0 rows affected (0.02 sec)
DEFAULT 子句,MySQL 隱式視為 DEFAULT NULL (若允許 NULL) 或無預設值 (NOT NULL)。NOT NULL,插入時必須顯式提供值,不能依賴預設值。DEFAULT ...。新版 Workbench 智能識別 BLOB/TEXT 類型並自動移除 DEFAULT 子句。
| 類型 | 允許 DEFAULT | 備註 |
|---|---|---|
| TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | ❌ (8.0.13+ 允許) | |
| TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | ❌ | |
| GEOMETRY | ❌ | |
| JSON | ❌ (5.7) / ✅ (8.0+) | 8.0 允許 DEFAULT (JSON_OBJECT()) |
| VARCHAR / CHAR | ✅ | 長度受限 |
TEXT 族,超大二進制用 BLOB 族。NOT NULL 但不設 DEFAULT。mysqldump --no-create-options 導出結構可減少冗餘 DEFAULT。