mysql CONVERT_TZ行为不一致

时间:2018-04-25 14:52:09

标签: mysql sql

以下行为让我感到困惑。我的mysql服务器安装在带有EEST时区的PC上。 我想将mysql中的日期时间转换为UTC日期。

执行时

select CONVERT_TZ('1970-01-01 02:00:01', 'SYSTEM', '+00:00')

响应是: ' 1970-01-01 00:00:01'

同样,执行时

select CONVERT_TZ('1970-01-01 04:00:00', 'SYSTEM', '+00:00')

回复是:' 1970-01-01 02:00:00'

然而,当我基本上想要0 unix时间时,执行:

select CONVERT_TZ('1970-01-01 02:00:00', 'SYSTEM', '+00:00')

再次响应:' 1970-01-01 02:00:00'

为什么?难道我做错了什么?如何获得正确的值,即1970-01-01 00:00:00'?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是在CONVERT_TZ中进行的调整将导致在 UNIX纪元的开始之前或之前导致时间戳将被忽略,并且原始输入时间戳将被忽略将被退回。请考虑以下三个查询:

SELECT CONVERT_TZ('1970-01-01 01:00:01', 'SYSTEM', '+00:00');
-- '1970-01-01 00:00:01'
SELECT CONVERT_TZ('1970-01-01 01:00:00', 'SYSTEM', '+00:00');
-- '1970-01-01 01:00:00'
SELECT CONVERT_TZ('1970-01-01 00:30:00', 'SYSTEM', '+00:00');
-- '1970-01-01 00:30:00'

只有第一个查询调整时间戳;第二个只返回输入。

根据@Thomas上面给出的优秀评论,我从CONVERT_TZ的MySQL documentation中提取了以下内容:

  

如果从from_tz转换为UTC时,该值超出了TIMESTAMP类型支持的范围,则不会发生转换。