代码之家  ›  专栏  ›  技术社区  ›  Mikhail Batcer

MySQL STR_TO_日期和时区

  •  4
  • Mikhail Batcer  · 技术社区  · 7 年前

    当我在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_日期 将其输入视为系统时区(UTC+3)。

    但我在UTC时区中有datetime字符串。我该怎么办?查询是在Liquibase迁移中运行的,所以我不能使用以下变量 @@global.time_zone 用于时区转换。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Booboo    6 年前

    当您有一个时间戳列,并用一个字符串(如“2016-11-01 00:00:00”)对其进行初始化时,它将在与当前连接相关的时区中进行解释,然而,该时区可能与系统时区不同,然后转换为UTC进行存储。要解释UTC时区中的日期文字,必须首先使用以下SQL设置当前连接上的时区:

    SET time_zone = 'UTC';
    
    推荐文章