日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

MySql系统变量explicit_defaults_for_timestamp

發布時間:2025/3/21 windows 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql系统变量explicit_defaults_for_timestamp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前沒太注意timestamp這個數據類型,有個坑就是在默認值上,MySql-5.6.6棄用了explicit_defaults_for_timestamp這個系統變量。我的版本卻高于5.6.6,所以就掉進去了,囧。

如果你的mysql版本高于5.6.6,在創建下表時,報ERROR 1067 (42000): Invalid default value for 'ctime'

create table mytime (id int,atime timestamp not null,ctime timestamp not null );

那么恭喜中槍了!

看看mysql官網上的官網解釋吧:

timestamp.png

從圖中可以看出來,explicit_default_for_timestamp是解決這個問題的關鍵點。

當explicit_defaults_for_timestamp=false時,按照如下規則"初始化":

off_default_timestamp.png

  • 未明確聲明為NULL屬性的TIMESTAMP列被分配為NOT NULL屬性。 (其他數據類型的列,如果未顯式聲明為NOT NULL,則允許NULL值。)將此列設置為NULL將其設置為當前時間戳。
  • 表中的第一個TIMESTAMP列(如果未聲明為NULL屬性或顯式DEFAULT或ON UPDATE子句)將自動分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性。
  • 第一個之后的TIMESTAMP列(如果未聲明為NULL屬性或顯式DEFAULT子句)將自動分配DEFAULT'0000-00-00 00:00:00'(“零”時間戳)。 對于不指定此列的顯式值的插入行,該列將分配“0000-00-00 00:00:00”,并且不會發生警告。

當explicit_defaults_for_timestamp=true時,按照如下規則"初始化":

no_default_timestamp.png

  • 未明確聲明為NOT NULL的TIMESTAMP列允許NULL值。 將此列設置為NULL將其設置為NULL,而不是當前時間戳。
  • 沒有TIMESTAMP列自動分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP屬性。 必須明確指定這些屬性。
  • 聲明為NOT NULL且沒有顯式DEFAULT子句的TIMESTAMP列被視為沒有默認值。 對于不為此列指定顯式值的插入行,結果取決于SQL模式。 如果啟用了嚴格的SQL模式,則會發生錯誤。 如果未啟用嚴格的SQL模式,則會為列分配隱式默認值“0000-00-00 00:00:00”,并發出警告。 這類似于MySQL如何處理其他時間類型,如DATETIME。

解決方法

在my.cnf中添加或修改explicit_defaults_for_timestamp=true

注:修改時不一定在my.cnf中,而是在my.cnf中指定的文件中,我的是寫在指定的子文件中的,一開始修改時也挺蒙圈的,附一段內容,方便查找修改。

mysql_my_cnf.png

修改完文件,使文件生效后,再試試創建上面的表,就ok啦~



作者:x_zhaohu
鏈接:https://www.jianshu.com/p/d7d364745173
來源:簡書

總結

以上是生活随笔為你收集整理的MySql系统变量explicit_defaults_for_timestamp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。