MySQL每个连接时区没有正确填充CURRENT_TIMESTAMP

时间:2016-12-15 19:15:48

标签: mysql timezone utc

我正在尝试在将行插入数据库之前将CURRENT_TIMESTAMP设置为UTC。根据我的阅读,这就是你如何按连接进行的。

我服务器的时区是EST(+5:00)。

我在调试时执行以下操作:

  1. SELECT CURRENT_TIMESTAMP;存储此人在调试时使用。
  2. SET TIME_ZONE =' - 00:00';
  3. SELECT CURRENT_TIMESTAMP;存储此人在调试时使用。
  4. 截至目前,我希望我的数据库连接的time_zone为UTC。
  5. 按照惯例INSERT / UPDATE记录。
  6. 然后我将两个时间戳传递回我的页面,看看它们是什么。

    第一个默认为EST:[CURRENT_TIMESTAMP] => 2016-12-15 14:01:52

    其次是查询设置的UTC:[CURRENT_TIMESTAMP] => 2016-12-15 19:01:52

    但是,DB中的记录的CURRENT_TIMESTAMP为2016-12-15 14:01:52(EST)。

    不知道为什么!

    我正在使用Sequel Pro查看我的数据库。 似乎Sequel Pro将时间戳转换为当地时间。

    记录根据需要/预期通过SQL返回:

    2016-12-15 19:46:50

    Sequel pro显示:

    2016-12-15 14:46:50

    所以...这让我对我在选择DB应用程序时如何处理时区感到不满。如果有人认为这不是实际问题,请告诉我:)

1 个答案:

答案 0 :(得分:1)

TIMESTAMP数据类型始终以UTC格式存储在MySQL中。除了通过偏移它之外,没有办法参考其他时区存储它。无论何时使用当前time_zone设置进​​行渲染,它都会被翻译。除非将TIMESTAMP设置为time_zoneUTC,否则无法查看已存储的-00:00实际值一些等价物,然后阅读它。

所以,

SET time_zone = 'America/Halifax';  
SELECT @a := CURRENT_TIMESTAMP;   --> 2016-12-15 15:49:49
SET time_zone = 'UTC';
SELECT @a, CURRENT_TIMESTAMP;     --> 2016-12-15 15:49:49 2016-12-15 19:49:49
SET time_zone = 'America/Halifax';
SELECT @a, CURRENT_TIMESTAMP;     --> 2016-12-15 15:49:49 2016-12-15 15:49:49

在该序列的第二行中,当前时间戳在大西洋标准时间的上下文中呈现为文本字符串变量@a。

在第四个中显示文本字符串,然后显示在UTC上下文中呈现的当前时间戳。

DATETIMEDATE数据是逐字存储的,不参考时区设置。