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)