MySQL 5.7 預設啟用嚴格 SQL 模式(STRICT_TRANS_TABLES、NO_ZERO_DATE、NO_ZERO_IN_DATE),導入 5.5/5.6 時代允許的「零日期」(0000-00-00)或無效日期會直接報錯。快速修復:調整 sql_mode 移除嚴格項。
my.cnf# 典型路徑
/etc/my.cnf
/usr/local/mysql/etc/my.cnf
# 找到並註釋/刪除
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 或完整嚴格模式
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
my.inimy.iniC:\ProgramData\MySQL\MySQL Server 5.7\my.ini(隱藏資料夾)# 搜尋並註釋/刪除
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# Linux
systemctl restart mysqld
# Windows
net stop mysql57 && net start mysql57
# 或服務管理器重啟
sql_mode = "NO_ENGINE_SUBSTITUTION"
# 僅保留引擎替換防護,移除所有嚴格日期/分組/除零檢查
pt-upgrade 或自寫腳本掃描 0000-00-00、NULL 違規資料UPDATE t SET dt=NULL WHERE dt='0000-00-00'sql_mode 至推薦嚴格模式快速修復 ≠ 根治。上線前務必完成資料清洗與應用驗證,避免「零日期」在 5.7+ 成定時炸彈。