过滤器之间的Mysql转换时区选择

时间:2017-05-29 15:35:39

标签: mysql timezone mariadb

请告诉我,我正在复制一个我还没有找到的问题。这是我的问题。

我有一个DB,其中所有DateTime列都以UTC格式存储。我想知道我是否这样做:

select CONVERT_TZ(event.startingTime,'UTC', city.timezone) as startingTime
left join city on event.cityid = city.id 
where startingTime between '2017-01-01 00:00:00' and '2017-01-01 23:59:59'

这是否适用于处理时区的过滤器?例如,假设我有一个事件从UTC时间23:00开始,但城市是GMT + 2。该事件是否会被列出? (数据库中的“原始”数据是23:00所以它应该根据它出现,但是一旦用时区处理就是第二天的1点,所以它不应该根据这个显示出来 )。

我做了一个测试,看起来过滤器是处理前的“原始”数据之一,我觉得很难相信,这就是我在这里问的原因(我的mysql版本是10.0.21-MariaDB-1~喘鸣)

2 个答案:

答案 0 :(得分:1)

要做到最后,你可以进行测试并尝试:

select CONVERT_TZ(event.startingTime,'UTC', city.timezone) as startingTime
left join city on event.cityid = city.id 
where startingTime 
between CONVERT_TZ('2017-01-01 00:00:00','UTC', '+2:00') 
and CONVERT_TZ('2017-01-01 23:59:00','UTC', '+2:00')

如果您将转换放在where子句中,它将正确过滤

答案 1 :(得分:1)

TIMESTAMP存储,而不是DATETIME。然后,在获取时,将根据客户端中指定的时区转换日期和时间。无需CONVERT_TZ