MySQL 5.7 預設啟用嚴格 SQL 模式(STRICT_TRANS_TABLES),導致匯入舊版資料時,DATE/DATETIME 零值(0000-00-00)或不合法日期報錯。解決方法是調整 sql_mode。
# 找到設定檔(通常在 /etc/my.cnf 或 /usr/share/mysql/my-default.cnf) vi /etc/my.cnf # 找到 sql_mode 設定行,註解或移除 # sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 重啟服務 systemctl restart mysqld
# 編輯安裝目錄下的 my.ini # 找到: # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" # 註解或刪除該行,重啟服務
# 設定檔位於隱藏資料夾: C:\ProgramData\MySQL\MySQL Server 5.7\my.ini # 同樣註解或移除 sql-mode 行,重啟服務
| 模式 | 效果 |
|---|---|
| STRICT_TRANS_TABLES | 交易表嚴格模式,非法值報錯回滾 |
| NO_ZERO_DATE | 不允許 '0000-00-00' 日期 |
| NO_ZERO_IN_DATE | 不允許月/日為 0 的日期 |
| ERROR_FOR_DIVISION_BY_ZERO | 除以零報錯而非回傳 NULL |