2015-11-01 163 views
8

我將使用MySQL和PHP,並且需要將時區存儲在數據庫中。用了一下就可以讀書了,好像我需要使用像America/Los_Angeles,而不是,Pacific Standard TimePST8PDT+02.00在數據庫中存儲時區

難道我存儲整個America/Los_Angeles串,或者是有某種它的整數ID如https://stackoverflow.com/a/11580459/1032531描述爲c#?如果誰是字符串,最大字符數是多少?

回答

6

America/New_York這樣的時區字符串是指所謂的zoneinfo數據庫中的條目。讀這個。 https://www.iana.org/time-zones它目前由互聯網號碼分配機構維護。它變化很大,因爲它的維護者爭相跟上日光節約規則和其他臨時政治事物的變化。

在類UNIX系統上,條目存儲在文件系統目錄層次結構中,而不是某些代碼號。

你問:

我是否存儲整個America/Los_Angeles

是。

是否有某種整數ID呢?

不,如果您希望您的應用程序和數據庫能夠面向未來,則不是。在MySQL部分有一個包含zoneinfo數據的time_zone_id,但是沒有人對保持這些數字保持不變作出任何承諾。

當前(2015g)數據庫中最長的字符串是「America/Argentina/ComodRivadavia」。它的長度是32個字符。使用VARCHAR(64)來存儲這些信息可能是有意義的,所以你永遠不會用完。

順便說一下,WordPress爲用戶提供了一個可用時區名稱的選擇列表(下拉列表),並將用戶的選擇存儲爲文本。

http://www.iana.org/time-zones

4

入住這裏MySql DateTime

的MySQL從當前時區轉換TIMESTAMP值以UTC進行存儲,並返回從UTC到檢索當前時區。 (對於其他類型(如DATETIME),不會發生這種情況。)默認情況下,每個連接的當前時區是服務器的時間。時區可以基於每個連接進行設置。只要時區設置保持不變,您可以恢復您存儲的相同值。

您應該在表格中添加一個新列以保留您的時區以及提取信息何時轉換您的時區。

+1

請描述「您的表中的新列以保持您的時區」引用。 – user1032531

+1

如果您需要確切地知道數據庫轉換日期時間之前的哪個時區,則需要保留它,因爲數據庫會自動將您的日期時間轉換爲服務器時區並存儲它。 – Laurentiu

+0

我的意思是我應該使用'VARCHAR(32)'來存儲它嗎?這對於所有時區是否足夠大?另外,確認時區沒有一些整數ID。 – user1032531