以個人經驗,在編程時正確安排日期/時間老是充滿危險和困難。 mysql
Ruby和Rails一直以來都讓我望而卻步,即便是因爲大量的選擇,也是如此。 我歷來不知道該選哪一個。 sql
當我使用Rails並查看ActiveRecord數據類型時,我能夠找到如下內容 數據庫
:datetime,:timestamp,:time和:date 編程
並且不知道它們之間的差別是什麼或陷阱潛伏在哪裏。 spa
有什麼不一樣? 你用它們作什麼? unix
(PS我正在使用Rails3) code
ActiveRecord中不一樣日期/時間格式之間的差別與Rails無關,而與所使用的任何數據庫無關。 get
以MySQL爲例(若是沒有其餘緣由,由於它最受歡迎),則具備DATE
, DATETIME
, TIME
和TIMESTAMP
列數據類型; 就像您擁有CHAR
, VARCHAR
, FLOAT
和INTEGER
。 io
因此,你問,有什麼區別? 好吧,其中有些是不言自明的。 DATE
僅存儲日期, TIME
僅存儲日期,而DATETIME
二者都存儲。 date
DATETIME
和TIMESTAMP
之間的區別更加細微: DATETIME
的格式設置爲YYYY-MM-DD HH:MM:SS
。 有效範圍是從1000年到9999年(以及介於二者之間的全部時間。從數據庫中獲取的TIMESTAMP
看起來很類似,但實際上它只是unix時間戳的開頭,其有效範圍是1970年到2038年。除了數據庫引擎內建的各類內置功能以外,這裏的區別在於存儲空間,由於DATETIME
存儲年,月,日,時,分和秒中的每一個數字,因此總共使用了8個字節。僅做爲TIMESTAMP
存儲從1970-01-01開始的秒數,它使用4個字節。
您能夠在此處閱讀更多有關MySQL時間格式之間差別的信息 。
最後,它取決於您須要的日期/時間列。 您是否須要存儲1970年以前或2038年以後的日期和時間? 使用DATETIME
。 您是否須要擔憂數據庫的大小,而且您處於該時間範圍內? 使用TIMESTAMP
。 您只須要存儲日期嗎? 使用DATE
。 您只須要存儲時間嗎? 使用TIME
。
綜上所述, Rails實際上爲您作出了一些決策 。 :timestamp
和:datetime
都默認爲DATETIME
,而:date
和:time
對應於DATE
和TIME
。
這意味着在Rails中,您只需決定是否須要存儲日期,時間或二者都存儲。
:datetime(8個字節)
:timestamp(4個字節)
這是我發現的一個很棒而又精確的解釋。
TIMESTAMP用於跟蹤記錄的更改,並在每次更改記錄時進行更新。 DATETIME用於存儲不受記錄更改影響的特定和靜態值。
TIMESTAMP還受與TIME ZONE相關的其餘設置的影響。 DATETIME是常數。
TIMESTAMP在內部將當前時區轉換爲UTC進行存儲,並在檢索期間將其轉換回當前時區。 DATETIME沒法作到這一點。
TIMESTAMP是4個字節,DATETIME是8個字節。
支持的TIMESTAMP範圍:'1970-01-01 00:00:01'UTC至'2038-01-19 03:14:07'UTC DATETIME支持的範圍:'1000-01-01 00:00:00'至'9999 -12-31 23:59:59′
來源: https : //www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/# :~: text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant 。
也...