2017-06-21 56 views
0

Timestamp是否可以插入UTC時間而不是本地時間(System_time_Zone)。Can Timestamp數據類型插入UTC時間而不是本地時間(System_time_Zone)

根據MySQL文檔 - 「MySQL將TIMESTAMP值從當前時區轉換爲UTC存儲,並從UTC返回到當前時區進行檢索。」

當我在timestamp數據類型中插入now()時,保存的值是與Datetime數據類型相同的本地時間。 datetime的日期值似乎是靜態的,但TimeZone會在更新會話時區時不斷更新。

MySQL Workbench 6.3查詢 - 我目前在EDT時區。

desc datedemo ; 

-------------------------------------------------- 
| mydatetime  | 'datetime'    | 
-------------------------------------------------- 
| mytimestamp  |'timestamp'    | 
-------------------------------------------------- 
| utcdate   | datetime    | 
-------------------------------------------------- 

SELECT @@global.time_zone, @@session.time_zone; 

-------------------------------------------------- 
| @@global.time_zone|'@@session.time_zone' 
-------------------------------------------------- 
| SYSTEM   | SYSTEM | 
-------------------------------------------------- 

insert into datedemo values (now(), now(),UTC_TIMESTAMP()); 

select * from datedemo 

---------------------------------------------------------------------- 
| mydatetime   | mytimestamp    | utcdate 
---------------------------------------------------------------------- 
| 2017-06-21 16:20:28| 2017-06-21 16:20:28  |2017-06-21 20:20:28 
---------------------------------------------------------------------- 

SET SESSION TIME_ZONE = "+00:00"; // UTC time ZONE 

select * from datedemo 

---------------------------------------------------------------------- 
| mydatetime   | mytimestamp    | utcdate 
---------------------------------------------------------------------- 
| 2017-06-21 16:20:28| 2017-06-21 20:20:28  |2017-06-21 20:20:28 
---------------------------------------------------------------------- 

timeStamp數據類型保存UTC時間在哪裏?根據我的理解,它只是使用會話時區並相應地轉換時間,這也是由Datetime完成的,唯一的區別是日期時間是靜態的,但TimeStamp使用客戶端時區保持轉移。

我可能完全錯了,但如果能回答這個問題,我將不勝感激。

回答

0

the MySQL docs

的MySQL從當前時區TIMESTAMP值轉換爲UTC存儲,並返回從UTC到檢索當前時區。無論價值,你放到一個DATETIME型將保持你到底如何設置它(這並不適用於其他類型,比如DATETIME發生。)

將類型TIMESTAMP中存儲的值從會話時區存儲到UTC時將進行轉換。然後,當您讀回它時,它會從UTC轉換到會話時區。

全球時區只定義會話時區設置爲什麼,如果您沒有在會話期間明確設置會話時區。

通常,如果您知道需要跨時區轉換,請使用TIMESTAMP類型。另一方面,如果您希望該值始終與您輸入的值完全相同,無論會話時區爲何,請使用DATETIME類型。

創建一個類似CreatedUTC的字段是完全有效的,該字段始終以UTC格式寫入和讀取,並且是DATETIME類型。但是,如果您相信會話時區將被正確使用,您可能更喜歡Created作爲TIMESTAMP

相關問題