MySQL問題記錄——定義timestamp類型的數據
摘要:本文主要記錄了在使用MySQL的過程中定義timestamp類型數據時遇到的問題以及解決方案。
問題重現
在Windows環境下安裝MySQL,配置服務的時候出現的問題:
1 D:\All\MySQL\mysql-5.6.44-winx64\bin>mysqld --initialize 2 2019-07-01 19:16:13 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 3 2019-07-01 19:16:13 0 [Note] mysqld (mysqld 5.6.44) starting as process 14996 ... 4 5 D:\All\MySQL\mysql-5.6.44-winx64\bin>
解決辦法
在配置文件中加入:
1 [mysqld] 2 # explicit_defaults_for_timestamp 3 explicit_defaults_for_timestamp=true
問題說明
MySQL5.6.6以前:
如果timestamp類型的列指定值為null,默認為當前timestamp。
如果timestamp類型的列沒有指定值為null,也就是沒有傳值,默認為非null的一個值。
表中第一個timestamp列,如果沒有指定值為null、也沒有設置默認值,在插入和更新時都會設置為當前時間。
表中第一個timestamp列之后的所有timestamp列,如果沒有被定義為null、定義default值,會設置為'0000-00-00 00:00:00'。
MySQL5.6.6以后,需要在配置文件里設置 explicit_defaults_for_timestamp=true ,其含義為:
如果timestamp類型的列指定值為null,默認為當前timestamp。
如果timestamp類型的列沒有指定值為null,也就是沒有傳值,默認為null。
聲明timestamp類型的列不為能為null,而且沒有指定默認值。在插入時timestamp類型的列沒有指定值,如果是嚴格sql模式,會拋出一個錯誤,如果嚴格sql模式沒有啟用,該列會賦值為‘0000-00-00 00:00:00’,同時出現警告。
