2011-09-18 18 views
0

我需要爲PHP/MySQL表單存儲表單提交的時間戳。我希望能夠以最靈活的方式查詢此字段,以便在PHP中顯示數據。什麼是MySQL數據類型是最佳實踐,我應該使用哪個PHP函數來存儲/檢索數據?PHP/MySQL - 關於存儲時間戳的困惑

+1

可能的重複[是unix時間戳存儲時間戳的最佳方式?](http://stackoverflow.com/questions/178704/are-unix-timestamps-the-best-way-to-store-timestamps) –

回答

2

我會存儲這些數據爲MySQL提供TIMESTAMP數據類型。這有很多的優勢比其他存儲選項,例如DATETIMEINT以下

  • 它應特別是存儲特定時刻上市。無論您的服務器位於哪個時區以及您的mysql客戶端位於哪個時區,存儲在TIMESTAMP字段中的常量CURRENT_TIMESTAMP的值將始終指向絕對時間線中的相同時刻。
  • 它在內部使用4個字節的空間進行存儲,與INT數據類型相同
  • 在常規查詢中,它會爲您提供漂亮的,可理解的值。
  • 此外,這些漂亮的值將轉換爲連接到它的客戶端的時區。這可能對你有好處或壞處。如果mysql時區表已填充或類似於SET time_zone='+5:30',則可以隨時將其更改爲所需的一個,包括UTC,set timezone='timezone'。只有在期望的時區沒有夏令時調整的情況下,後者纔有效。
  • 您的查詢可以利用MySQL瞭解此字段代表日期的事實。因此,您可以運行如下查詢:獲取所有註冊在過去3年5月份發生的事件。
  • 使用內置函數來更改顯示格式以顯示unix時間戳或任何其他有效表單。
+0

什麼是你說的「絕對時間線」? –

+0

最終,我們必須將時間表示轉化爲物理世界中的事件。這是我在這裏提到的絕對時間線。一個例子就是倫敦奧運的就職典禮。無論您使用哪種時間格式(例如ISO8601,W3C),時區(例如UTC,IST,PDT),它都會始終指向相同的時間實例。 DATETIME數據類型沒有附帶它的時區信息,這使得客戶端必須從其他來源獲取此信息以指向時間軸上的有意義的點。 – Anshul

0

不知道你在說什麼時間戳,但對於UNIX時間戳,你需要INT類型字段。