2017-04-13 63 views
0
UPDATE test SET add_time = '2017-04-29' WHERE id = 1; 

'add_time'的類型是timestmap,上面的語句將被插入'2017-04-29 15:00:00',我的問題是爲什麼它不是'2017-04 -29 00:00:00'。它可能與mysql的時區有關?mysql的類型時間地圖

+0

是的,這是因爲時區。 – Barmar

+0

如何設置以獲得'2017-04-29 00:00:00' – Frank

回答

0

MySQL 5及以上版本中,TIMESTAMP值將從當前時區轉換爲UTC存儲,並從UTC轉換回當前時區以供檢索。 (這僅出現在TIMESTAMP數據類型中,而不適用於其他類型,如DATETIME。)

默認情況下,每個連接的當前時區是服務器的時間。時區可以基於每個連接進行設置,如MySQL Server Time Zone Support中所述。

2017-04-29 15:00:00表示2017年4月29日下午3點。Timestamp也保存日期和時間。那段時間是因爲時區。

不過,如果你只需要選擇日期部分,你可以做到以下幾點:

SELECT date(ColumnName) from tablename 

以上將只得到唯一的日期部分。當你需要同時包含日期 和時間信息值

DateTime類型使用。 MySQL檢索並顯示 'YYYY-MM-DD HH:MM:SS'格式的DATETIME值。支持的範圍是'1000-01-01 00:00:00'至'9999-12-31 23:59:59'。

...

時間戳數據類型具有 的範圍 '1970-01-01 00:00:01' UTC的 '2038年1月9日3時14分07秒' UTC。它不同的性質,取決於 MySQL版本和服務器運行的SQL模式。

對於你的情況,我會建議你使用datetime代替timestamp

+0

爲什麼在他離開時間時將時間設置爲15:00? – Barmar

+0

'2017-04-29'被插入'Timestamp',爲什麼它保存'2017-04-29 15:00:00'不適合'2017-04-29 15:00:00'? – Frank

+0

這是因爲mysql時區。請參閱我的更新回答 –