mysql時間屬性 MySQL 時間戳屬性2

2021-10-18 11:32:20 字數 2806 閱讀 5142

在mysql 5.6版本中引入引數explicit_defaults_for_timestamp設定,該引數會影響timestamp的預設屬性。

同時在mysql 5.6版本中中,去除一張表只能有乙個timestamp列的限制,允許單錶中使用多個時間戳列。

在mysql 5.6中,當引數explicit_defaults_for_timestamp=off時:

1、timestamp列如果沒有明確指定為nll,則預設為not null

2、timestamp列如果明確指定為null,則會增加預設值null

3、表中第乙個timestamp列,如果沒有宣告為null屬性、default或者 on update,會自動分配 default current_timestamp和on update current_timestamp 屬性。

4、表中第二個timestamp列,如果沒有宣告為null或者default子句,預設自動分配』0000-00-00 00:00:00′。插入行時沒有指明改列的值,該列缺省分配』0000-00-00 00:00:00′,且沒有警告。

如使用下面指令碼建立:create tabletb2004(

idint primary key,

c1timestamp,

c2timestamp,

c3timestamp);

然後showcreate tabletb2004會發現建立指令碼為:create table`tb2004` (

`id`int(11) not null,

`c1`timestamp not null default current_timestamp on update current_timestamp,

`c2`timestamp not null default '0000-00-00 00:00:00',

`c3`timestamp not null default '0000-00-00 00:00:00',primary key(`id`)

) engine=innodb default charset=utf8

在mysql 5.6中,當引數explicit_defaults_for_timestamp=on時:

1、timestamp列如果沒有明確指定為not nll則預設為null

2、表中timestamp列宣告為not null時,則不會為列自動建立預設值,且該列不能顯式插入null值。

3、表中第乙個timestamp列不會自動分配 default current_timestamp和on update current_timestamp 屬性,需要顯式宣告。

4、表中第二各timestamp列與第乙個timestamp列不會存在特殊設定。

如使用下面指令碼建立:create tabletb2004(

idint primary key,

c1timestamp,

c2timestamp,

c3timestamp);

然後showcreate tabletb2004會發現建立指令碼為:create table`tb2004` (

`id`int(11) not null,

`c1`timestamp null default null,

`c2`timestamp null default null,

`c3`timestamp null default null,primary key(`id`)

) engine=innodb default charset=utf8

而如使用下面指令碼建立:create tabletb2005(

idint primary key,

c1timestamp not null,

c2timestamp not null,

c3timestamp not null);

然後showcreate tabletb2005會發現建立指令碼為:create table`tb2005` (

`id`int(11) not null,

`c1`timestamp not null,

`c2`timestamp not null,

`c3`timestamp not null,primary key(`id`)

) engine=innodb default charset=utf8

在mysql5.7.8及之後版本中,引數sql_mode的預設值為:

only_full_group_by

strict_trans_tables

no_zero_in_date

no_zero_date

error_for_division_by_zero

no_auto_create_user

no_engine_substitution

其中no_zero_in_date和no_zero_date會嚴格限制時間欄位和時間戳字段的值:

no_zero_in_date:要求年月日都為0或月日不為0

no_zero_date:要求年月日中任一項不為0

當sql_mode中同時包含no_zero_in_date和no_zero_date時,則不允許向時間欄位和時間戳字段插入任何非法日期的值,即不允許插入'0000-00-00 00:00:00'的值。

總結和建議:

1、為避免受引數explicit_defaults_for_timestamp的影響,在建表時建議寫全timestamp的所有屬性。

2、時間戳字段主要用於記錄行被插入或更新的時間,應避免向時間戳列顯示插入null值或異常時間值。

mysql時間屬性 MySQL 時間戳屬性1

datetime型別和timestamp型別的差別 datetime型別 datetime型別存放資料範圍從1001年到9999年,精度為秒,將時間和日期封裝成格式為yyyymmddhhmmss的整數中,使用8個位元組的儲存空間。datetime型別不存放任何時區相關資訊。datetime型別預設為...

mysql日期時間戳轉換 mysql日期時間戳轉換

1.mysql獲取當前時間戳 mysql select unix timestamp unix timestamp 1525739078 1 row in set mysql select unix timestamp now unix timestamp now 1525739117 1 row ...

mysql怎麼新增時間 MYSQL中新增時間

1.在建立新記錄和修改現有記錄的時候都對這個資料列重新整理 timestamp default current timestamp on update current timestamp 2.在建立新記錄的時候把這個字段設定為當前時間,但以後修改時,不再重新整理它 timestamp default...