Mysql

MySQL時間戳時區處理

  • September 30, 2014

時間戳數據類型是表示即時時間還是年-月-日-時-分-秒值?瞬間就是瞬間,就像您開始閱讀本文的那一刻一樣,它可以用許多不同的 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 伺服器的時間戳配置為什麼。

引用自:https://dba.stackexchange.com/questions/62466