【问题标题】:Stop changing dates automatically in MySQL on tz change在 tz 更改时停止在 MySQL 中自动更改日期
【发布时间】:2016-06-29 15:29:12
【问题描述】:

我正在使用 DATETIME 字段将我的日期存储在 MySQL 中。没有直接指定任何时区(只有一个日期时间列)

但是当服务器上的时区发生变化时,MySQL 根据新时区更新了所有日期时间列。

实际上改用 EDT 是原因。

我不需要自动重新计算我的日期 - 只是想在其中存储特定日期。

因此,即使 tz 从 EST 日期手动更改为 UTC,如果它是 2016 年 1 月 1 日 18:55,它也应该是相同的(从字符 POV 开始),它在任何新的 tz 中都应该是相同的。

我没有运行任何脚本\查询来更新日期。

所以它要么由 MySQL 本身执行,要么由服务器执行。

需要建议我需要检查什么以查找和禁用此类功能。

【问题讨论】:

    标签: mysql timezone


    【解决方案1】:

    确保您使用的是DATETIME 而不是TIMESTAMP

    [来自 MySQL 文档][1]:

    MySQL 将TIMESTAMP 值从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。 (DATETIME等其他类型不会出现这种情况。)

    您还应该查看这篇文章(重复): Will changing a MySQL timezone change values of DateTime fields in a database?

    【讨论】:

    • @Dmitry - 你有什么问题吗?
    • 我确信受影响的日期在日期时间字段中。我手动更改了 tz 但日期没有更改。因此,要么在系统切换到 EDT 时运行了系统中的特定脚本,要么在我的代码中出现了我无法找到和重现的错误。
    • 系统是 Ubuntu 服务器,不确定是哪一个。最新的 LTE 之一
    • 好的。由于您对 tz 的手动更新没有更改 DateTime 字段,这确定了 MySQL 文档声称的点。因此,我建议您查看用于更新系统的脚本。我怀疑它与ubuntu有关。如果您对回复感到满意,请关闭此回复,以便人们将来参考。
    • 一些更多的材料来支持dev.mysql.com/doc/refman/5.5/en/time-zone-support.html的论点
    【解决方案2】:

    我为我带来的混乱感到抱歉 只是扩展了我的查询以获取一些旧日期 - 它看起来没有变化

    所以在我的代码中肯定会出错..

    无论如何-感谢您的帮助

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多