Mysql

如何將 TIMESTAMP 預設值設置為 1970-01-01 00:00:01 UTC?

  • May 25, 2016

如何在不更改的情況下將 TIMESTAMP 列的預設值設置為 1970-01-01 00:00:01 UTC time_zone

我嘗試了以下方法:

CREATE TABLE `foo` (`ts` TIMESTAMP DEFAULT CONVERT_TZ(
   '1970-01-01 00:00:01', '+00.00', @@session.time_zone));

但出現語法錯誤:

ERROR 1064 (42000):您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以CONVERT_TZ('1970-01-01 00:00:01', '+00.00', @@session.time_zone))在第 1 行附近使用正確的語法

有沒有辦法在不創建觸發器的情況下做到這一點?如果沒有,我將如何使用 TRIGGER 來做到這一點?

澄清後編輯:

恐怕你無法按你的意願處理它。

您必須找到另一種方式,例如預設為NULL並選擇通過

SELECT COALESCE(ts, CONVERT_TZ( '1970-01-01 00:00:01', '+00.00', @@session.time_zone)) AS ts, ...

或者只是使用datetimetime_zone 並將其儲存在單獨的列中。這取決於您的要求。但是你無法讓它像你想要的那樣工作,即使使用觸發器也是如此。

原答案:

您不能在表定義中使用任何函式。

無論如何,您嘗試做的事情都是不必要的。我可以引用手冊嗎

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

如果您要跨不同時區查詢數據庫,並且需要日期/時間來反映各個使用者的設置,請使用timestamp. 如果無論時區如何都需要一致性,請使用datetime.

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