MySQL STR_TO_DATE和时区

时间:2017-10-27 13:56:24

标签: mysql datetime timezone liquibase str-to-date

我的系统时区是UTC + 3。

当我使用MySQL中的时间戳列时,它们会输出我的时区。因此,如果时间戳列的格式为00:00 UTC,则对我来说显示为03:00。

我需要使用STR_TO_DATE填充时间戳列。

例如我做:

INSERT INTO `dates`(`created`) 
VALUES (STR_TO_DATE('2016-11-01 00:00:00', '%Y-%m-%d %H:%i:%s'))

插入的值显示为:2016-11-01 00:00:00

我的结论是:STR_TO_DATE认为其输入属于系统时区(UTC + 3)。

但我有UTC时区的日期时间字符串。我该怎么办?该查询在Liquibase迁移中运行,因此我无法使用@@global.time_zone等变量进行时区转换。

1 个答案:

答案 0 :(得分:1)

当您有TIMESTAMP列并使用诸如'2016-11-01 00:00:00'之类的字符串对其进行初始化时,它将在与当前连接关联的时区中进行解释,但是可能不会与系统时区相同,然后转换为UTC进行存储。要解释UTC时区中的日期文字,您必须首先使用以下SQL在当前连接上设置时区:

SET time_zone = 'UTC';