插入數據時提示 Field 'web_pic' doesn't have a default value,原因是該列定義為 NOT NULL 但無 DEFAULT,且 MySQL 運行在嚴格 SQL 模式下。本文提供三種解決方案:修改表結構添加默認值、調整 sql_mode 關閉嚴格模式、應用層補全字段值,並分析雲數據庫無法修改配置時的應對策略。

表結構中 web_pic VARCHAR(255) NOT NULL 缺少 DEFAULT '' 或 DEFAULT 'default.png'。
ALTER TABLE `table_name`
MODIFY COLUMN `web_pic` VARCHAR(255) NOT NULL DEFAULT '';
或指定業務默認值:DEFAULT 'default.png'。
雲數據庫(如京東雲擎、RDS)通常支援在線 DDL,無需停機。


[mysqld]
sql_mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 移除 STRICT_TRANS_TABLES, STRICT_ALL_TABLES
SET SESSION sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
風險:關閉嚴格模式後,NOT NULL 列插入 NULL 會被自動轉為空字符串/0/零日期,掩蓋業務邏輯錯誤,導致數據質量下降。
@NotNull / @NotBlank 校驗。entity.setWebPic(entity.getWebPic() != null ? entity.getWebPic() : "");DEFAULT。作者推測頻繁導入導出數據庫導致 CREATE TABLE 語句丟失 DEFAULT 子句。建議:
mysqldump --defaults-file=... --no-create-info 僅導數據,結構由版本控制的遷移腳本管理。首選方案 1:ALTER TABLE ... MODIFY COLUMN ... DEFAULT '',兼容嚴格模式、不改變全局行為、雲數據庫友好。嚴格模式 STRICT_TRANS_TABLES 是數據質量護欄,建議保持開啟,從結構與應用雙層面保證非空列有值。