【问题标题】:Store an already UTC timestamp in TIMESTAMP field without further conversion in MySQL在 TIMESTAMP 字段中存储已经 UTC 时间戳,无需在 MySQL 中进一步转换
【发布时间】:2017-08-28 01:22:01
【问题描述】:

根据 MySQL 文档:

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。

我对检索转换没问题,但对于存储我已经有一个 UTC 时间戳。它是这样从客户端发送的,因为它是在客户端计算的值,我想避免时区转换(因为我认为这会增加客户端-服务器通信的复杂性)。

如何插入此值以避免进一步转换?

【问题讨论】:

    标签: php mysql timestamp utc


    【解决方案1】:

    现在我正在使用这个解决方法:

    CONVERT_TZ('2009-06-15T13:45:30.0000000Z','+00:00','SYSTEM')
    

    我不希望转换将再次转换的值(尽管在内部),但它似乎对我来说是更方便的解决方案。

    另一种选择是使用:

    SET time_zone = '+00:00';
    --- your query here
    SET time_zone = 'SYSTEM';
    

    但在我的情况下,因为我只需要转换两个字段,这似乎有点矫枉过正,尽管在这种情况下根本不应该进行任何转换。

    【讨论】:

      【解决方案2】:

      如果您不希望 MySQL 进行任何转换,也许最简单的方法是将时间戳存储在数字字段中。
      这可能是不好的做法,具体取决于您要使用它做什么,该线程对优缺点进行了一些讨论: Using MySQL's TIMESTAMP vs storing timestamps directly

      【讨论】:

      • 谢谢@glaux,我仍然想要检索转换。由于时间戳是在客户端计算的,我认为仅以 UTC 格式发送时间戳以避免处理客户端时区与服务器时区问题会更简单。但是我仍然对检索时的转换感兴趣,所以我将继续使用 TIMESTAMP 字段类型。
      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2013-06-23
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多