更新故事中的MySQL时区差异

时间:2013-05-07 16:19:00

标签: mysql timezone

我正在使用共享主机,因此我无法访问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语句,但效果很好。

2 个答案:

答案 0 :(得分:1)

如果ultimo_acceso字段的类型为TIMESTAMP,则该值实际上存储为UTC,然后在您选择退出值时将其转换回当前时区。因此,您需要在select语句中再次设置时区。

如果您使用的是DATETIME数据类型,那么您设置的值应该保留而不进行转换,您将获得准确存储的内容 - 无论选择时的时区设置如何。

See the MySQL docs on this subject

答案 1 :(得分:0)

请注意DATETIMEDATETIME字段始终会返回您放入其中的确切时间,而不管time_zone变量的值。

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