我的系统时区是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
等变量进行时区转换。
答案 0 :(得分:1)
当您有TIMESTAMP列并使用诸如'2016-11-01 00:00:00'之类的字符串对其进行初始化时,它将在与当前连接关联的时区中进行解释,但是可能不会与系统时区相同,然后转换为UTC进行存储。要解释UTC时区中的日期文字,您必须首先使用以下SQL在当前连接上设置时区:
SET time_zone = 'UTC';