TIMESTAMP和DATETIME的區別以及選擇

2021-09-10 07:48:01 字數 2383 閱讀 9868

型別

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,不做任何改變,基本上是原樣輸入和輸出

需要注意:

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

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

具體可參照部落格:

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

不屬於任意時區

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

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

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

答: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型別了。**自:

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 秒 ...

datetime和timestamp的區別

datetime 1 允許為空值,可以自定義值,系統不會自動修改其值。2 不可以設定預設值,所以在不允許為空值的情況下,必須手動指定datetime欄位的值才可以成功插入資料。3 雖然不可以設定預設值,但是可以在指定datetime欄位的值的時候使用now 變數來自動插入系統的當前時間。結論 dat...

TIMESTAMP和DATETIME的區別

a timestamp占用 4個位元組 b datetime占用 8個位元組 c timestamp實際記錄的是 1970 01 01 00 00 01 到現在的數數,受時區影響 d datetime不受時區影響 e timestamp的時間範圍是 1970 01 01 00 00 01 utc 2...