国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL 5.6 中 TIMESTAMP有那些變化

2024-07-24 13:07:51
字體:
來源:轉載
供稿:網友

前段時間,系統MySQL從5.5升級到了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′,且沒有警告。

MySQL 5.6 中 TIMESTAMP有那些變化

MySQL 5.6 中 TIMESTAMP有那些變化

2列TIMESTAMP未聲明為NULL的默認行為

從MySQL5.6.6開始這種默認設置的方法被廢棄了。在MySQL啟動時會出現以下警告:

 

 
  1. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 
  2. Please use --explicit_defaults_for_timestamp server option 
  3. (seedocumentation for more details). 

關閉警告,在my.cnf中加入

 

  1. [mysqld] 
  2. explicit_defaults_for_timestamp=true 

重啟MySQL后錯誤消失,這時TIMESTAMP的行為如下:

TIMESTAMP如果沒有顯示聲明NOT NULL,是允許NULL值的,可以直接設置改列為NULL,而沒有默認填充行為。

TIMESTAMP不會默認分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP屬性。

MySQL 5.6 中 TIMESTAMP有那些變化

MySQL5.6-INNODB-timestampTIMESTAMP 不設置是否為NULL

聲明為NOT NULL且沒有默認子句的TIMESTAMP列是沒有默認值的。往數據表中插入列,又沒有給TIMESTAMP列賦值時,如果是嚴格SQL模式,會拋出一個錯誤,如果嚴格SQL模式沒有啟用,該列會賦值為'0000-00-00 00:00:00′,同時出現一個警告。(這和MySQL處理其他時間類型數據一樣,如DATETIME)

MySQL 5.6 中 TIMESTAMP有那些變化

TIMESTAMP 默認設置為NOT NULL

Note:

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

MySQL從5.5升級到5.6,TIMESTAMP的變化

前言

前段時間,系統MySQL從5.5升級到了5.6,系統出現了大量的異常。大部分異常引起原因是由于TIMESTAMP的行為發生了變化。

TIMESTAMP在MySQL5.5中的行為

第一個未設置默認值的TIMESTAMP NOT NULL字段隱式默認值:

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 后面未設置默認值的TIMESTAMP NOT NULL字段隱式默認值:

0000-00-00 00:00:00 TIMESTAMP NOT NULL字段插入NULL時,會使用隱式默認值:

CURRENT_TIMESTAMP 不支持多個CURRENT_TIMESTAMP 默認值

TIMESTAMP在MySQL5.6中的行為

支持多個CURRENT_TIMESTAMP 默認值 可以兼容5.5的行為,支持隱性默認值

explicit_defaults_for_timestamp=0 我測試安裝的MySQL5.6默認使用這個參數,啟動時,服務器會給出一個警告。

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).

可以去掉隱性默認值

explicit_defaults_for_timestamp=1

總結

MySQL5.5中TIMESTAMP行為是比較詭異的,會造成一些隱含的問題,比如程序中傳入了NULL值 MySQL5.6中可以將TIMESTAMP的行為變得正常,但會存在兼容問題 explicit_defaults_for_timestamp參數未來會消失 我們不要過度依賴數據庫的特性,這些特性會給應用程序造成掣肘

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大名县| 漾濞| 岳池县| 吉安市| 鸡西市| 汶川县| 江永县| 安新县| 荆门市| 密云县| 遵义县| 佛学| 商丘市| 曲水县| 西乌| 张北县| 堆龙德庆县| 盐亭县| 息烽县| 资阳市| 岳阳市| 鱼台县| 刚察县| 通山县| 邯郸县| 宜章县| 万全县| 鄢陵县| 贞丰县| 旺苍县| 柳州市| 专栏| 涿鹿县| 泾源县| 涟源市| 临朐县| 兴安县| 车致| 车致| 通榆县| 淳安县|