程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL 5.6 中 TIMESTAMP 的變化分析

MySQL 5.6 中 TIMESTAMP 的變化分析

編輯:關於MYSQL數據庫

在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:

以上內容和存儲引擎選擇無關。

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