Mysql

sql backup restore 將 createdAt 轉換為本地 TZ

  • January 17, 2021

我在 JAWSDB 的雲中有一個遠端 MySQL 數據庫。

我有UTC TZ 中記錄createdAtupdatedAt時間戳。

我將使用mysqldump -h HOST -u USER -p > backup.sql. 然後我將這些恢復到本地 MySQL 伺服器使用 mysql -u USERNAME -p DB_NAME < backup.sql

但是,在檢查新的本地備份時…我注意到createdAt時間戳是針對我的本地 TZ 的(EST 和實際在 JAWSDB 中的 UTC 版本之前的 5 小時)。updatedAt時間戳仍然UTC存在。

順便說一句,這是我創建這些時間戳欄位的方式。

`createdAt` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updatedAt` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

因此,轉儲的恢復似乎僅針對該createdAt欄位從 UTC 轉換為 EST。這可能是由於 JawsDB 和我的本地伺服器之間的引擎或 mysql 版本不匹配造成的嗎?

有什麼見解嗎?謝謝!

來自 MySQL文件

MySQL 將 TIMESTAMP 值從目前時區轉換為 UTC 進行儲存,並從 UTC 轉換回目前時區進行檢索。(這不會發生在其他類型,例如 DATETIME。)預設情況下,每個連接的目前時區是伺服器的時間。可以基於每個連接設置時區。只要時區設置保持不變,您就可以返回儲存的相同值。如果您儲存一個 TIMESTAMP 值,然後更改時區並檢索該值,則檢索到的值與您儲存的值不同。發生這種情況是因為沒有使用同一時區進行雙向轉換。目前時區可用作 time_zone 系統變數的值。有關更多資訊,請參閱第 5.1.15 節,“MySQL 伺服器時區支持”。

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