MySQL STR_TO_DATE 和时区

MySQL STR_TO_DATE and timezone

我的系统时区是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 这样的变量来进行时区转换。

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

在当前连接上设置时区
SET time_zone = 'UTC';