2012-12-12 79 views
3

我與各種ORM和數據庫抽象一起工作,旨在使它能夠輕鬆處理多個數據庫,無論是關係數據庫還是非數據庫。更全面的解決方案通常會讓您訪問某些日期函數,這些日期函數可歸結爲實際的SQL(或者在非SQL數據庫的情況下)。另一方面,這些抽象中的許多抽象並不提供對SQL函數的直接訪問,並且你失去了直接處理日期的能力。相反,您需要使用上層語言(PHP,Python,或其他)來進行日期爭奪,最後只需插入,選擇具有格式的日期。所以我的問題是這樣的:如果SQL服務器永遠不會對日期本身做任何事情,我最好使用一個int並將紀元時間戳放入其中,還是有額外的值給數據庫服務器「知道「這是約會?沒有日期函數的SQL日期有什麼用?

+2

當您使用不使用您的ORM包裝的工具訪問數據庫時可能很有用。使用第三方數據庫管理時,直接訪問數據庫的報告生成或數據挖掘工具可以在數據庫中有實際日期時更加便於用戶使用。 – Philipp

回答

3

如果您使用日期,請將它們存儲爲日期。

這不僅使它更易於在數據庫和應用程序之間進行轉換,而且當您需要根據日期進行任何操作(並且您將會,否則爲什麼有日期存儲?)。

也就是說,當您需要使用日期進行排序或查詢時,您不需要特別努力重新轉換爲日期。

+0

不是說我一定不同意你說的話,但排序的例子對我來說沒有意義。如果我使用紀元timestamp * int *,它會按日期排序嗎? – kojiro

+0

@kojiro - 不,但是當您需要選擇一個範圍時,在指定的月份中說出所有內容,您需要開始計算... – Oded

+0

以確保。但這個問題可以解釋,*如果我需要手動進行計算... * – kojiro

1

除了什麼@Oded said,如果你從來沒有使用任何日期相關的功能,仍然有一些問題;

  • 此刻,你cannot store epoch timestamp in milliseconds into an INT字段(溢出)。

  • 時間戳沒有毫秒將在Tue Jan 19 2038 @ 03:14:08 GMT+0000 (GMT)溢出INT因爲它會比2147483647更大。

  • 但是,整數需要4個字節,日期時間需要8個字節。 You are better off 4 bytes if you are within above two limitations.

+0

我想總是有'BIGINT'。這給我買了時間。 :) – kojiro

+0

@kojiro,這是我能想到的唯一的東西:) – Kaf