【问题标题】:MySQL timezone discrepancy on Update tale更新故事上的MySQL时区差异
【发布时间】:2013-05-01 16:38:13
【问题描述】:

我正在使用共享主机,因此我无权访问 mysql 配置文件。

该系统上的默认时区是“America/New_York”,但我的数据库需要使用 UTC -5:00。

每次执行查询时,时区都会设置为 UTC -5:00,如下所示:

SET time_zone='-5:00';

如果我想要当前时间,SELECT NOW() 返回正确的时间和日期,但是在更新表时 mysql 使用 SYSTEM 时间而不是设置的时区

UPDATE administradores SET ultimo_acceso=NOW() WHERE id=1

为什么这些值不同?由于我覆盖了时区,两个查询中的时间不应该相同吗?

我也尝试过使用 INSERT 语句,效果很好。

【问题讨论】:

  • 我不确定,但是当你设置一些你在本地做的事情时,我认为你需要将它设置为全局 dev.mysql.com/doc/refman/5.5/en//time-zone-support.html 看看那个 URL
  • America/New_York 在一年中的部分时间处于 UTC-05:00,在夏令时处于 UTC-04:00。您确定要禁用 DST 吗?另外 - ultimo_accesso 的确切数据类型是什么?
  • @MattJohnson 是的,我实际上想使用墨西哥城时区,我认为它是美国中部时间。 ultimo_acceso 是一个时间戳
  • 那么您可能想使用America/Mexico_City 作为时区ID。它在 -6 和 -5 之间切换。 See this list.
  • This page 也可能提供信息。

标签: mysql timezone


【解决方案1】:

如果ultimo_acceso 字段的类型为TIMESTAMP,则该值实际上是以UTC 格式存储的,然后在您选择退出时转换回当前时区。所以需要在select语句中重新设置时区。

如果您使用的是 DATETIME 数据类型,那么您设置的值应该在不进行转换的情况下保持不变,并且您将得到您存储的确切内容 - 无论选择时的时区设置如何。

See the MySQL docs on this subject.

【讨论】:

  • 你是对的,数据库上的值存储为 SYSTEM 时区,但是当使用不同的时区查询时,更改就完成了。
  • 这将是一个直接在数据库上工作的问题,但使用 PHP 应该没有问题。谢谢
  • @JorgeZapata - 它实际上以 UTC 格式存储。只是你自己不设置系统时区是默认的。
【解决方案2】:

请注意,DATETIMEDATETIME 字段将始终返回您放入其中的确切时间,无论 time_zone 变量的值如何。

TIMESTAMP 字段自动将其值转换为time_zone 变量指定的时区。

【讨论】:

  • 我使用的是 TIMESTAMP 字段,不应该使用 SESSION time_zone 值吗?
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多