CONVERT_TZ() が正しい結果を返さないときの対処法

4.10.8. MySQL サーバのタイム ゾーン サポートにある例のクエリを投げたところ、CONVERT_TZ() の結果が NULL になってしまっていました。

> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+-----------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
+-----------------------------------------------+
| NULL                                          |
+-----------------------------------------------+
1 row in set (0.00 sec)

調べてみたら 4.5.5. mysql_tzinfo_to_sql ― タイム ゾーン テーブルのロード というのがあるらしいので、試しに下記のクエリを投げてみたところ、テーブルが空でした。

SELECT * FROM mysql.time_zone;

ということで、下記コマンドを実行し、無事期待通りの動作をするようになりました。

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql
> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+-----------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
+-----------------------------------------------+
| 2004-01-01 13:00:00                           |
+-----------------------------------------------+
1 row in set (0.00 sec)