最近在客戶的環境下看到這個訊息
ERROR 1292 (22007) at line 1: Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_at' at row 1
MySQL其實是允許這種日期格式的,官方稱這種日期為dummy date,有些情況比使用NULL方便。
但為什麼在開發時沒有出現這個錯誤,在客戶環境出現這個問題呢?
後來發現原來是各環境sql_mode設定不一致!!
AWS RDS 上的MySQL預設沒有開啟嚴格模式,但從官網安裝的MySQL預設設定檔是有開啟的,並有檢查日期格式。
若在嚴格模式下sql_mode內有 NO_ZERO_IN_DATE,NO_ZERO_DATE,會顯示錯誤訊息,但可以用ignore忽略錯誤。非嚴格模式下,只會出現警告。
NO_ZERO_IN_DATE: 不允許年月日中的月日為0
NO_ZERO_DATE: 不允許年月日為0
所以說若環境中允許0000-00-00這種日期的話就把NO_ZERO_IN_DATE,NO_ZERO_DATE從參數內拿掉吧,或者是把日期定義完整吧。