MySQL時間戳時區處理
時間戳數據類型是表示即時時間還是年-月-日-時-分-秒值?瞬間就是瞬間,就像您開始閱讀本文的那一刻一樣,它可以用許多不同的 ymdhm-s+timezone 值來描述。沒有時區,它是模棱兩可的,同一時刻對我來說可能是 17:25,對別人來說可能是 13:25。
這就是我想我得到的。該
current_timestamp
函式返回目前時區中的目前時間,所以這是一個明確的瞬間,真正的now。在表中,它儲存為 UTC,因此對於這個假定的時區,它也應該是明確的。現在這是我不明白的:這是
utc_timestamp
函式的存在。我將 acurrent_timestamp
和 an儲存utc_timestamp
在同一列中,它們是不同的。這個函式甚至不應該存在,我不明白為什麼它代表一個不同的時刻。
TIMESTAMP儲存從 1970-01-01 00:00:01 到現在的秒數。當您檢索數據時,它會自動轉換為日期和時間格式。
CURRENT_TIMESTAMP():返回配置了您的時區的目前日期時間。 UTC_TIMESTAMP():使用 UTC 時區返回目前日期和時間。
如果您使用的時區不是 UTC,這些函式總是返回不同的值,否則相等。
MySQL 始終以 UTC 儲存日期和時間,因此可以輕鬆地將其轉換為不同的時區。**NOW()或CURRENT_TIMESTAMP()**返回日期/時間加上您配置的時區。
**UTC_TIMESTAMP()**只返回忽略您的時區設置的日期/時間。
如果你使用
current_timestamp
,MySQL 將使用在 中配置的時區my.cnf
。如果沒有設置任何值my.cnf
,那麼 MySQL 將確定您的作業系統的時區並在啟動時使用它。你可以看到你的伺服器是如何配置這個查詢的:
mysql> SELECT @@global.time_zone, @@session.time_zone;
此外,可以為每個會話設置時間戳。
utc_timestamp
用於始終獲取 UTC 時間戳,無論 MySQL 伺服器的時間戳配置為什麼。