天天看點

關于mysql字段時間類型timestamp預設值為目前時間問題

今天把應用部署到aws上發現背景修改内容送出後程式報錯,經過排查發現是更新資料的時候,有張資料表中的一個timestamp類型的字段預設值變成了"0000-00-00 00:00:00.000000"格式,導緻解析失敗造成的。

在mysql該字段的建立語句如下

因為在本地開發環境測試過,沒有該問題,應用環境一直,唯一不同的是,生産環境資料庫用的是aws的rds的mysql,經過對錯誤資訊的搜尋,大緻應該是mysql參數配置的問題。

看了下mysql官方文檔

by default, the first timestamp column has both default current_timestamp and on update current_timestamp if neither is specified explicitly。

很多時候,這并不是我們想要的,如何禁用呢?

1. 将“explicit_defaults_for_timestamp”的值設定為on。

2. “explicit_defaults_for_timestamp”的值依舊是off,也有兩種方法可以禁用

     1> 用default子句該該列指定一個預設值

     2> 為該列指定null屬性。

開發環境explicit_defaults_for_timestamp 的值是off

比對了下rds中mysql的參數,發現這個參數值為0,因為rds中mysql的預設參數組是不允許修改的,是以建立個參數組,會預設把default的參數組繼承過來,當時并不知道這裡的0和1是怎麼對應on和off的,是以就把值改成了1.然後重新開機rds。

此時發現就不會有該錯誤了。

将rds中mysql的參數改成如下情況 完美解決

explicit_defaults_for_timestamp = 1

繼續閱讀