2012-10-18 119 views
3

TIMESTAMP字段類型與時區相關的行爲是什麼?MySQL - TIMESTAMP字段類型自動轉換爲UTC?

插入到該字段插入的任何時間戳記的值是?

或者它是否假定插入的時間戳值的時區在服務器本地時間並將其轉換爲UTC?

編輯:

這裏是我的測試

  • 我跑了兩個PHP日期()和MySQL的SELECT NOW()和他們輸出大致相等的時間戳。兩者的結果都不是UTC時間。

  • 我試圖插入到一個測試表由從PHP日期()

  • 從PHP日期()的值應該被轉換爲UTC得到的時間戳字段的值。但是,我在數據庫中看到的不是UTC。 TIMESTAMP字段的值按原樣插入。

回答

3

TIMESTAMP值始終保存爲UTC。

MySQL將TIMESTAMP從當前時區轉換爲UTC存儲並從UTC返回到當前時區以供檢索。

默認時區是服務器時區,可以在連接上設置。見this

欲瞭解更多詳情,請參閱MySQL Doc

我可以通過一個例子來說明這一點。請執行在MySQL控制檯中的查詢:

mysql> CREATE TABLE `testtable` (
     `date_timestamp` TIMESTAMP NOT NULL, 
     `date_datetime` DATETIME NOT NULL 
     ) 
     ENGINE = InnoDB; 
Query OK, 0 rows affected (0.06 sec) 

mysql> SET time_zone = '+00:00'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into testtable values(now(),now()); 
Query OK, 1 row affected (0.03 sec) 

mysql> select * from testtable; 
+---------------------+---------------------+ 
| date_timestamp  | date_datetime  | 
+---------------------+---------------------+ 
| 2012-10-19 05:01:38 | 2012-10-19 05:01:38 | 
+---------------------+---------------------+ 
1 row in set (0.00 sec) 

mysql> SET time_zone = '+05:30'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> 
mysql> insert into testtable values(now(),now()); 
Query OK, 1 row affected (0.03 sec) 

mysql> select * from testtable; 
+---------------------+---------------------+ 
| date_timestamp  | date_datetime  | 
+---------------------+---------------------+ 
| 2012-10-19 10:31:38 | 2012-10-19 05:01:38 | 
| 2012-10-19 10:31:47 | 2012-10-19 10:31:47 | 
+---------------------+---------------------+ 
2 rows in set (0.00 sec) 
+0

嗯所以你說,無論我給的時間戳值,MySQL將它轉換爲UTC。做了一些測試,似乎並非如此。我是否需要做一些類似'SET time_zone ='+00:00';' – arvinsim

+0

編輯我原來的帖子以供測試和結果。 – arvinsim

+0

你可以檢查我的例子。當您查詢數據庫時,時區將是您的系統時區,並自動轉換UTC日期。你如果你想查看UTC的日期。你應該用'SET time_zone ='+00:00';'設置時區,如果你想看到UTC的日期爲 – Khaleel

-4

TIMESTAMPT值按原樣插入。