程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於mysql字段時間類型timestamp默認值為當前時間問題,mysqltimestamp

關於mysql字段時間類型timestamp默認值為當前時間問題,mysqltimestamp

編輯:MySQL綜合教程

關於mysql字段時間類型timestamp默認值為當前時間問題,mysqltimestamp


今天把應用部署到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 CURRENT_TIMESTAMP  正常情況下 應該是當前數據更改的時間格式

因為在本地開發環境測試過,沒有該問題,應用環境一直,唯一不同的是,生產環境數據庫用的是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屬性。

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

開發環境explicit_defaults_for_timestamp 的值是OFF


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

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

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

explicit_defaults_for_timestamp = 1

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved