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

高洛峰
發布: 2016-11-05 17:00:04
原創
1207 人瀏覽過

今天把應用程式部署到AWS上發現後台修改內容提交後程式報錯,經過排查發現是更新資料的時候,有張資料表中的一個timestamp類型的欄位預設值變成了"0000-00-00 00: 00:00.000000"格式,導致解析失敗造成的。

在mysql該欄位的建立語句如下

`XXX` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
DEFAULT CURRENT_TIMESTAMP ON UPDATE RRAMP因為在本地開發環境測試過,沒有該問題,應用環境一直,唯一不同的是,生產環境資料庫用的是AWS的RDS的mysql,經過對錯誤訊息的搜索,大致應該是mysql參數配置的問題。

 

看了下mysql官方文檔

By default, the first TIMESTAMP column has both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP if

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

1. 將「explicit_defaults_for_timestamp」的值設為ON。

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

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

   

mysql> show variables like '%explicit_defaults_for_timestamp%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
row in set (0.00 sec)
登入後複製

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

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

將rds中mysql的參數改成如下情況 完美解法


explicit_defaults_for_timestamp = 1



相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板