MySQL問題記錄——定義timestamp類型的數據


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’,同時出現警告。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM