- 論壇徽章:
- 0
|
本帖最后由 William_Sang 于 2013-05-13 16:24 編輯
在MySQL 5.6.6之前,TIMESTAMP的默認行為:
- TIMESTAMP列如果沒有明確聲明NULL屬性,默認為NOT NULL。(而其他數(shù)據(jù)類型,如果沒有顯示聲明為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′,且沒有警告。
MySQL5.6-MyISAM-2timestamp.png (21.87 KB, 下載次數(shù): 26)
下載附件
2013-05-13 16:18 上傳
MySQL5.6-MyISAM-timestamp.png (38.44 KB, 下載次數(shù): 18)
下載附件
2013-05-13 16:18 上傳
2列TIMESTAMP未聲明為NULL的默認行為
從MySQL5.6.6開始這種默認設置的方法被廢棄了。在MySQL啟動時會出現(xiàn)以下警告:
- [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屬性。
MySQL5.6-INNODB-timestamp.png (33.93 KB, 下載次數(shù): 21)
下載附件
2013-05-13 16:18 上傳
TIMESTAMP 不設置是否為NULL
聲明為NOT NULL且沒有默認子句的TIMESTAMP列是沒有默認值的。往數(shù)據(jù)表中插入列,又沒有給TIMESTAMP列賦值時,如果是嚴格SQL模式,會拋出一個錯誤,如果嚴格SQL模式?jīng)]有啟用,該列會賦值為’0000-00-00 00:00:00′,同時出現(xiàn)一個警告。(這和MySQL處理其他時間類型數(shù)據(jù)一樣,如DATETIME)
MySQL5.6-INNODB-timestamp-NOT-NULL.png (26.32 KB, 下載次數(shù): 22)
下載附件
2013-05-13 16:18 上傳
TIMESTAMP 默認設置為NOT NULL
Note:
以上內(nèi)容和存儲引擎選擇無關。
轉載自:MySQL 5.6 中 TIMESTAMP 的變化 |
評分
-
查看全部評分
|