4

我的系统时区是 UTC+3。

当我在 MySQL 中使用时间戳列时,它们是我的时区的输出。因此,如果时间戳列的 UTC 时间为 00:00,对我来说它显示为 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时区转换之类的变量。

4

1 回答 1

1

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

SET time_zone = 'UTC';
于 2019-05-17T16:10:51.733 回答