2017-05-28 28 views
0

我在我的數據庫中使用時間戳字段,我的PHP軟件具有基於用戶時區的自己的時間管理系統。我想爲某些類型的數據(創建或修改時間)使用時間戳字段,並且也可以使用列的。在MySQL中使用SET time_zone的任何缺點PHP

每次創建會話時,是否使用時區設置爲UTC,使用SET time_zone = '+00:00'。我有四個單獨的數據庫,該軟件使用,目前,我將當前時區設置爲UTC。

我不想使用DATETIME,因爲它們在尺寸更大,也是我將無法使用DEFAULT CURRENT_TIMESTAMP作爲服務器的時區可能會偏移。

回答

0

如果您的後端已經使用所有邏輯正確轉換用戶的時區,則不應使用SET time_zone,因爲您不必要地浪費資源。 UTC時區應該放入數據庫的元數據中,數據庫事務始終與它們一起工作。

順便說一句,TIMESTAMP columns always will be stored in UTC,所以你不需要設置,除非你的列是datetime(不是這種情況,我認爲)。

當您插入TIMESTAMP值時,MySQL會將其從您的 連接的時區轉換爲UTC以進行存儲。當您查詢TIMESTAMP 值時,MySQL會將UTC值轉換回您的連接時間 區域。請注意,此轉換不會發生其他時間 數據類型,如DATETIME。

所以,你有兩個選擇:

  • 設置在您的交易與您的SQL工作時間的時區;
  • 將unix時區處理到後端,並僅向用戶顯示正確的轉換時間。

我更喜歡第二個。

+0

是的,我沒有讀過關於默認情況下utc中設置時區的mysql設置時區,但總是在檢索時轉換它。我的php時區設置爲UTC,mysql設置爲我的系統時區。我不想將UTC設置爲mysql的全球時區,因爲它也會影響系統中的其他數據庫。 – kks21199

0

在處理輸入日期和/或修改日期的日期/時間時,最好使用正常的VARCHAR,長度大約爲200(或任何其他適合整個日期的值)以存儲完整日期並在您的PHP腳本中處理您的日期/時間。這使您能夠靈活地根據您的PHP代碼中定義的時區來查看您的時間。 Click here查看PHP中的可用時區。

您還可以通過簡單使用PHP的date_format,以任何可能的格式格式化日期/時間。

我在下面給出了一個參考碼。

//This is the way you define your timezone in PHP code 
date_default_timezone_set('Asia/Beirut'); 

//You can capture the date/time by using the below code. This will store "2017-05-28 23:55:34" 
$date_time_registered = date('Y-m-d H:i:s'); 

//Retrieve the date/time and re-format it as you require. Below code will output "May", full month. 
$retrieve_month_only = date_create($row['your_store_date_time']); 
$retrieve_month_formatted = date_format($retrieve_month_only, 'F'); 

echo $retrieve_month_formatted; 

你可以參考this link,瞭解PHP日期/時間格式。