我應該在MySQL中使用datetime或timestamp數據類型嗎?

您是否建議使用日期 時間時間戳字段?爲何(使用MySQL)? html

我正在服務器端使用PHP。 mysql


#1樓

時間戳記數據類型存儲日期和時間,但以UTC格式存儲,而不像datetime那樣以當前時區格式存儲。 當您獲取數據時,時間戳再次將其轉換爲當前時區時間。 sql

所以,假設您在美國,而且從具備美國時區的服務器獲取數據。 而後您將根據美國時區得到日期和時間。 當時間戳記數據類型列的行被更新時,它老是自動更新。 所以,跟蹤上次更新特定行的時間可能頗有用。 數據庫

有關更多詳細信息,您能夠閱讀博客文章Timestamp Vs Datetime服務器


#2樓

謹防時間戳變化的,當你在表上作一個UPDATE語句。 若是您的表具備「名稱」(varchar),「年齡」(int)和「 Date_Added」(時間戳)列,則運行如下DML語句 spa

UPDATE table
SET age = 30

那麼「 Date_Added」列中的每一個單個值都將更改成當前時間戳。 code


#3樓

主要區別在於DATETIME是常數,而TIMESTAMP受time_zone設置影響。 htm

所以,只有在跨時區擁有或未來有同步集羣時,纔有意義。 索引

用簡單的話來講: 若是我在澳大利亞有一個數據庫,並轉儲該數據庫以在美國同步/填充數據庫,則TIMESTAMP將更新以反映新時區的事件實時,而DATETIME會仍然反映事件在au時區的時間事件

在應該使用TIMESTAMP的地方使用DATETIME的一個很好的例子是在Facebook中,那裏的服務器從不十分清楚跨時區發生了什麼時間。 在一次對話中,時間說的是我在實際發送消息以前回復消息。 (固然,若是發佈時間而不是同步時間,則這也多是因爲消息傳遞軟件中的時區轉換錯誤所致。)


#4樓

  1. TIMESTAMP是四個字節,而DATETIME是八個字節。

  2. 時間戳在數據庫上也更輕巧,索引速度更快。

  3. 當您須要同時包含日期和時間信息的值時,將使用DATETIME類型。 MySQL檢索並以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值。 支持的範圍是'1000-01-01 00:00:00'至'9999-12-31 23:59:59'。

TIMESTAMP數據類型的UTC範圍爲'1970-01-01 00:00:01'UTC至'2038-01-09 03:14:07'UTC。 它具備不一樣的屬性,具體取決於運行服務器的MySQL版本和SQL模式。

  1. DATETIME是常數,而TIMESTAMP受time_zone設置影響。

#5樓

時間戳和日期時間之間的另外一個區別是在時間戳中,您不能將默認值設置爲NULL。

相關文章
相關標籤/搜索