datetime型別和timestamp型別的差別
datetime型別
datetime型別存放資料範圍從2023年到2023年,精度為秒,將時間和日期封裝成格式為yyyymmddhhmmss的整數中,使用8個位元組的儲存空間。
datetime型別不存放任何時區相關資訊。
datetime型別預設為null
timestamp型別
timestamp型別儲存從1970-01-01 00:00(格林尼治標準時間)以來的秒數。
timestamp精確到秒,使用4個位元組的儲存空間,儲存範圍從2023年到2023年。
timestamp列缺省為not null
在mysql中,可以使用函式unix_timestamp和from_unixtime來進行整數秒和timestamp時間的轉換。
如:select unix_timestamp(now());
select from_unixtime(1468602420);
時間戳列屬性
timestarmp列可以設定兩個屬性:
1、default current_timestamp 表示插入記錄行時,如果未對該列指定值,則使用當前時間來為該字段賦值
2、on update current_timestamp 表示在更新記錄時,如果未更新該事件戳列,使用當前時間來更新該欄位,
重點: 當時間戳列屬性為on update current_timestamp時,如果更新操作未給時間戳列指定新值且更新操作未對其他列造成資料變化,則該時間戳列資料不會發生變化。
如果在定義時間戳字段時列定義為:c1 timestamp default current_timestamp,那麼c1列僅在插入且未指定值時會被賦值為當前時間,在更新且未指定更新值時該時間戳列不會發生值變化。
create table tb1002(id intprimary key,c1 timestamp default current_timestamp);
insert into tb1002(id)select 1 union select 2;
update tb1002set id=3 where id=1;select * fromtb1002;+----+---------------------+
| id | c1 |
| 2 | 2016-07-29 23:53:51 |
| 3 | 2016-07-29 23:53:51 |
從結果可以發現更新操作未更新時間戳列
如果在定義時間戳字段時列定義為:c1 timestamp on update current_timestamp,那麼c1列僅在更新且未指定更新值時會被更新為當前時間,而在插入時如果未指明插入值則將該事件戳列賦值為『0000-00-00 00:00:00』
create table tb1003(id intprimary key,c1 timestamp on update current_timestamp);
insert into tb1003(id)select 1;select * fromtb1003;+----+---------------------+
| id | c1 |
| 1 | 0000-00-00 00:00:00 |
+----+---------------------+從結果可以發現插入時列未被賦值為當前時間而被賦值為'0000-00-00 00:00:00』。
當時間戳字段被設定預設值,如在定義時間戳字段時列定義為:c1 timestamp default 0,,則不會為字段增加預設not null default current_timestamp on update current_timestamp屬性
create table tb1004(id int primary key,c1 timestamp default 0);
檢視建表語句變為:
create table `tb1004` (
`id`int(11) not null,
`c1` timestamp not null default'0000-00-00 00:00:00',
primary key (`id`)
) engine=innodb default charset=utf8
insert into tb1004(id)select 1 union select 2;
update tb1004set id=3 where id=1;select * fromtb1004;+----+---------------------+
| id | c1 |
| 2 | 0000-00-00 00:00:00 |
| 3 | 0000-00-00 00:00:00 |
+----+---------------------+從結果可以發現,無論是插入還是更新,都沒有將時間戳字段更新為當前時間,而是使用預設值!
mysql時間屬性 MySQL 時間戳屬性2
在mysql 5.6版本中引入引數explicit defaults for timestamp設定,該引數會影響timestamp的預設屬性。同時在mysql 5.6版本中中,去除一張表只能有乙個timestamp列的限制,允許單錶中使用多個時間戳列。在mysql 5.6中,當引數explicit...
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...