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