MySQL 5.6 中 TIMESTAMP 的變更剖析。本站提示廣大學習愛好者:(MySQL 5.6 中 TIMESTAMP 的變更剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 5.6 中 TIMESTAMP 的變更剖析正文
在MySQL 5.6.6之前,TIMESTAMP的默許行動:
■TIMESTAMP列假如沒有明白聲明NULL屬性,默許為NOT NULL。(而其他數據類型,假如沒有顯示聲明為NOT NULL,則許可NULL值。)設置TIMESTAMP的列值為NULL,會主動存儲為以後timestamp。
■表中的第一個TIMESTAMP列,假如沒有聲明NULL屬性、DEFAULT或許 ON UPDATE,會主動分派 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 屬性。
■表中第二個TIMESTAMP列,假如沒有聲明為NULL或許DEFAULT子句,默許主動分派'0000-00-00 00:00:00′。拔出行時沒有指明改列的值,該列默許分派'0000-00-00 00:00:00′,且沒有正告。
2列TIMESTAMP未聲明為NULL的默許行動
從MySQL5.6.6開端這類默許設置的辦法被放棄了。在MySQL啟動時會湧現以下正告:
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (seedocumentation for more details).
封閉正告,在my.cnf中參加
[mysqld] explicit_defaults_for_timestamp=true
重啟MySQL後毛病消逝,這時候TIMESTAMP的行動以下:
■TIMESTAMP假如沒有顯示聲明NOT NULL,是許可NULL值的,可以直接設置改列為NULL,而沒有默許填充行動。
■TIMESTAMP不會默許分派DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP屬性。
TIMESTAMP 不設置能否為NULL
■聲明為NOT NULL且沒有默許子句的TIMESTAMP列是沒有默許值的。往數據表中拔出列,又沒有給TIMESTAMP列賦值時,假如是嚴厲SQL形式,會拋出一個毛病,假如嚴厲SQL形式沒有啟用,該列會賦值為'0000-00-00 00:00:00′,同時湧現一個正告。(這和MySQL處置其他時光類型數據一樣,如DATETIME)
TIMESTAMP 默許設置為NOT NULL
Note:
以上內容和存儲引擎選擇有關。