在Ruby on Rails中,DateTime,Timestamp,Time和Date之間有什麼區別?

以個人經驗,在編程時正確安排日期/時間老是充滿危險和困難。 mysql

Ruby和Rails一直以來都讓我望而卻步,即便是因爲大量的選擇,也是如此。 我歷來不知道該選哪一個。 sql

當我使用Rails並查看ActiveRecord數據類型時,我能夠找到如下內容 數據庫

:datetime,:timestamp,:time和:date 編程

並且不知道它們之間的差別是什麼或陷阱潛伏在哪裏。 spa

有什麼不一樣? 你用它們作什麼? unix

(PS我正在使用Rails3) code


#1樓

ActiveRecord中不一樣日期/時間格式之間的差別與Rails無關,而與所使用的任何數據庫無關。 get

以MySQL爲例(若是沒有其餘緣由,由於它最受歡迎),則具備DATEDATETIMETIMETIMESTAMP列數據類型; 就像您擁有CHARVARCHARFLOATINTEGERio

因此,你問,有什麼區別? 好吧,其中有些是不言自明的。 DATE僅存儲日期, TIME僅存儲日期,而DATETIME二者都存儲。 date

DATETIMETIMESTAMP之間的區別更加細微: 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對應於DATETIME

這意味着在Rails中,您只需決定是否須要存儲日期,時間或二者都存儲。


#2樓

  1. :datetime(8個字節)

    • 存儲格式爲YYYY-MM-DD HH:MM:SS的日期和時間
    • 對於諸如birth_date之類的列頗有用
  2. :timestamp(4個字節)

    • 自1970-01-01以來存儲的秒數
    • 對於諸如updated_at,created_at之類的列頗有用
  3. :date(3個字節)
    • 店鋪日期
  4. :time(3個字節)
    • 儲存時間

#3樓

這是我發現的一個很棒而又精確的解釋。

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

也...

具備不一樣列「日期」類型和相應的rails遷移類型的表,具體取決於數據庫

相關文章
相關標籤/搜索