即使在加载时区表后,convert_tz也会返回null

时间:2013-11-21 03:58:12

标签: mysql sql

我有一个MySQL数据库(托管在Ubuntu上),它有一个带时区的表。此日期位于UTC时区。我有一个使用此数据的应用程序但需要将时间从UTC转换为PST以便以有用的格式显示数据。

这可能会在应用程序级别上更改,但我目前没有时间这样做,所以我想要做的是使用convert_tz来获取正确的时区,直到我有时间更改应用程序以转换时区。

然而,每当我做

之类的事情时
SELECT id, 
       category, 
       convert_tz(create_datetime, 'UTC', 'PST') as create_datetime
FROM table

我得到的结果如

1, category, NULL

我知道我需要加载时区表,所以我做了,运行这个命令:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

之后我重新启动了mysql服务。但是,convert_tz仍会返回NULL。有人可以帮我一把吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

确保您创建的datetime列的类型为timestamp

请参阅此http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz

SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');

答案 1 :(得分:1)

当我遇到这个问题时,那是因为我使用了错误的时区名称。我从MySQL文档MET中的示例中使用的时区错误地推断出,像PST这样的3个字母的美国时区可以工作。情况并非如此:美国时区被命名为“PST8PDT'等等。所以,而

select convert_tz('2016-10-16 06:23:00', 'UTC', 'PST');

返回NULL

select convert_tz('2016-10-16 06:23:00', 'UTC', 'PST8PDT');

返回转换时间。

您可以使用

在MySQL实例中查看时区名称
select Name from mysql.time_zone_name;