天天看點

資料庫中timestamp,datetime,int時間類型差別

mysql中timestamp,datetime,int類型差別   int 1. 占用4個位元組 2. 建立索引之後,查詢速度快 3. 條件範圍搜尋可以使用使用between 4. 不能使用mysql提供的時間函數 結論:适合需要進行大量時間範圍查詢的資料表   datetime 1. 占用8個位元組 2. 允許為空值,可以自定義值,系統不會自動修改其值。 3. 實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.) 4. 與時區無關(It has nothing to deal with the TIMEZONE and Conversion.) 5. 不可以設定預設值,是以在不允許為空值的情況下,必須手動指定datetime字段的值才可以成功插入資料。 6. 可以在指定datetime字段的值的時候使用now()變量來自動插入系統的目前時間。 結論:datetime類型适合用來記錄資料的原始的建立時間,因為無論你怎麼更改記錄中其他字段的值,datetime字段的值都不會改變,除非你手動更改它。   timestamp 1. 占用4個位元組 2. 允許為空值,但是不可以自定義值,是以為空值時沒有任何意義。 3. TIMESTAMP值不能早于1970或晚于2037。這說明一個日期,例如'1968-01-01',雖然對于DATETIME或DATE值是有效的,但對于TIMESTAMP值卻無效,如果配置設定給這樣一個對象将被轉換為0。 4.值以UTC格式儲存( it stores the number of milliseconds) 5.時區轉化 ,存儲時對目前的時區進行轉換,檢索時再轉換回目前的時區。 6. 預設值為CURRENT_TIMESTAMP(),其實也就是目前的系統時間。 7. 資料庫會自動修改其值,是以在插入記錄時不需要指定timestamp字段的名稱和timestamp字段的值,你隻需要在設計表的時候添加一個timestamp字段即可,插入後該字段的值會自動變為目前系統時間。 8. 以後任何時間修改表中的記錄時,對應記錄的timestamp值會自動被更新為目前的系統時間。

根據 ISO 8601《資料存儲和交換形式·資訊交換·日期和時間的表示方法》,UTC時間,也就是國際統一時間/國際協調時,表示方法如下:

YYYYMMDD T HHMMSS Z(或者時區辨別)。

例如,20100607T152000Z,表示2010年6月7号15點20分0秒,Z表示是标準時間

如果表示中原標準時間,那麼就是:

20100607T152000+08,其中 “+08” 表示東八區。

結論:timestamp類型适合用來記錄資料的最後修改時間,因為隻要你更改了記錄中其他字段的值,timestamp字段的值都會被自動更新。

設定時間時datatime與timestramp的選擇問題:

MySQL 中用來存儲完整時間的字段包括有 TIMESTAMP 和 DATETIME 兩個。很多人在選擇時間字段的時候就有點暈,到底我該選擇哪一個,它們倆有什麼差別嗎?

日期範圍

TIMESTAMP 支援從’1970-01-01 00:00:01′ 到 ’2038-01-19 03:14:07′ UTC. 這個時間可能對目前正在工作的人來說沒什麼問題,可以堅持到我們退休,但對一些年輕的讀者,就會有 Bug2K+38 的問題。

DATETIME 從 ’1000-01-01 00:00:00′ 直到’9999-12-31 23:59:59′.

考慮到二者在範圍上的不同,你目前的事件日志使用 TIMESTAMP 是沒有任何問題的,不過如果是為了記錄你祖父和孫子的生日,那還是要用 DATETIME.

另外我建議,如果是一些跟現在相關的時間,可以選擇 TIMESTAMP. 例如記錄的添加時間之類的,其他的話還是要選擇  DATETIME.

存儲方面的比較

TIMESTAMP 需要 4 位元組的存儲空間,而 DATETIME 則需要 8 位元組