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';
我的系统时区是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';