timestamp與datetime的對比

2021-10-03 05:16:48 字數 2215 閱讀 4650

型別

timestamp

datetime

不同點 儲存空間

timestamp占用4個位元組

datetime占用8個位元組

時區timestamp實際記錄的是1970-01-01 00:00:01到現在的數數,受時區影響

datetime不受時區影響

時間範圍

『1970-01-01 00:00:01』 utc ~ 『2038-01-19 03:14:07』 utc

『1000-01-01 00:00:00』 ~ 『9999-12-31 23:59:59』

儲存方式

對於timestamp,它把客戶端插入的時間從當前時區轉化為utc(世界標準時間)進行儲存。查詢時,將其又轉化為客戶端當前時區進行返回(中國屬於東八區,所以應該是utc+8)

而對於datetime,不做任何改變,基本上是原樣輸入和輸出

需要注意:

1.datetime與timestamp的格式問題

答:兩者都可用來表示yyyy-mm-dd hh:mm:ss[.fraction]型別的日期。

但是對於datetime它可分為兩部分:date部分和time部分,其中,date部分對應格式中的「yyyy-mm-dd」,time部分對應格式中的「hh:mm:ss[.fraction]」。對於date欄位來說,它只支援date部分,如果插入了time部分的內容,它會丟棄掉該部分的內容,並提示乙個warning。

具體可參照部落格:

2.什麼是utc?

答:協調世界時,又稱世界統一時間,世界標準時間,國際協調時間,簡稱utc

不屬於任意時區

中國大陸、中國香港、中國澳門、中國台灣、蒙古國、新加坡、馬來西亞、菲律賓、西澳大利亞州的時間與utc的時差均為+8,也就是utc+8。

時區(time zone)是地球上的區域使用同乙個時間定義。2023年在華盛頓召開國際經度會議時,為了克服時間上的混亂,規定將全球劃分為24個時區。在中國採用首都北京所在地東八區的時間為全國統一使用時間。

例:已知東京(東九區)時間為5月1日12:00,求北京(東八區)的區時?北京時間=12:00-(9-8)=11:00(即北京時間為5月1日11:00)。

3.對於mysql中timestamp資料型別的特點,為什麼選擇timestamp型別???

答:int型別占用4位元組,datetime占用8位元組,timestamp占用4位元組;通常情況下在選擇表中列的資料型別時我們要選擇能滿足儲存需要的,最小的資料型別,在使用mysql資料庫時有很多常見的誤解,其中使用int型別來儲存日期資料會提高資料讀取的效率就是比較常見的乙個誤解。顯然int要比datetime型別小很多,同時mysql又提供了兩個非常好用的函式from_unixtime() 和unix_timestamp(),使用這兩個函式可以方便的在int和datetime型別之間進行轉換,但是使用int型別儲存時間也給我們帶來了不少的麻煩:

1.資料的可讀性比較差,我們在檢視資料時不能直觀的看出時間列中記錄的一串整數所代表的時間

2.每次進行顯示時都要通過函式進行轉換,增加了資料使用的複雜成度。

那有沒有什麼更好的方法來儲存日期資料呢?這就要用到我們標題中所說到的timestamp型別了,timestamp型別的特點如下:

1.儲存占用 4個位元組,以年月日小時分秒的日期型式顯示

2.儲存範圍』1970-01-01 00:00:01』 to 『2038-01-19 03:14:07』.

3.以utc時區進行儲存,但是以系統當前時間進行顯示

4.可以在insert和update時把值自動更新為當前時間

由以上特點可以知道,timestamp儲存占用的空間和int型別相同,實際上timestamp型別的資料在儲存時就是被儲存成int型別的資料來儲存的,這和我們使用int來儲存日期時間資料可以說是完全一樣的。由於同樣是使用int型別來儲存資料,所以和int型別一樣其儲存的時間範圍也是有限制的,

**這一點大家一定要注意,超過了這個範圍的日期資料建議大家使用datetime型別來儲存。**另外timestamp資料儲存時是以utc時區來儲存的,在顯示時mysql會自動的把資料轉換為當前連線所對應時間來顯示。

可見,使用timestamp來儲存日期時間資料不但保證了資料型別的大小同int型別一樣,同時可以顯示為日期時間格式,這在給我們使用資料帶來了很多的方便。所以強烈建議大家,使用timestamp型別來儲存日期資料而不要再使用int型別了。**自:

時間戳TimeStamp與DateTime的轉換

時間戳timestamp與datetime的轉換 sql server2005中timestamp 轉換為datetime declare time nvarchar 15 set time 1294761599 select dateadd s,convert int time 1970 01 0...

python時間模組 time和datetime

python 中時間表示方法有 時間戳,即從1975年1月1日00 00 00到現在的秒數 格式化後的時間字串 時間struct time 元組。struct time元組中元素主要包括tm year 年 tm mon 月 tm mday 日 tm hour 時 tm min 分 tm sec 秒 ...

timestamp 與 nonce 防止重放攻擊

重放攻擊是計算機世界黑客常用的攻擊方式之一,所謂重放攻擊就是攻擊者傳送乙個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程。首先要明確乙個事情,重放攻擊是二次請求,黑客通過抓包獲取到了請求的http報文,然後黑客自己編寫了乙個類似的http請求,傳送給伺服器。也就是說伺服器處理了兩個...