首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Error 1101: BLOB/TEXT 欄位不能有預設值解決方案

     編輯:MySQL 綜合教學

錯誤現象

在 MySQL Query Browser 等 GUI 工具建立含 TEXT/BLOB 欄位的表時失敗:

mysql error 1101: blob/text column can't have a default value

原因分析

  • MySQL 規範:BLOB、TEXT、GEOMETRY、JSON (5.7 前) 類型不允許指定 DEFAULT 值 (除非 MySQL 8.0.13+ 支援 DEFAULT 'text' 但極少用)。
  • GUI 工具 (如 Query Browser、Workbench 早期版本) 在生成建表 SQL 時,可能隱式為所有欄位加上 DEFAULT NULL 或 DEFAULT '',導致違反規範。
  • 修改 sql_mode 註釋掉 STRICT_TRANS_TABLES 並重啟服務無效,此為硬性語法限制,非嚴格模式可繞過。

解決方案

方案一:使用命令列手寫 SQL (推薦)


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,插入時必須顯式提供值,不能依賴預設值。

方案二:GUI 工具調整欄位屬性

  1. 在建表介面選中 TEXT 欄位。
  2. 取消勾選「Default Value」或將其設為空/灰色不可編輯。
  3. 確保生成的 SQL 不含 DEFAULT ...。

方案三:使用較新版 Workbench (8.0+)

新版 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✅長度受限

最佳實踐

  1. 大文本儲存優先用 TEXT 族,超大二進制用 BLOB 族。
  2. 應用層保證非空業務邏輯,資料庫層設 NOT NULL 但不設 DEFAULT。
  3. 遷移老系統時,清理建表腳本中 BLOB/TEXT 的 DEFAULT 子句。
  4. 使用 mysqldump --no-create-options 導出結構可減少冗餘 DEFAULT。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved