UTC 日時値を MySQL に保存しています。CONVERT_TZ を使用してタイムゾーン変換を処理し、データベース内の UTC との間でローカル日時を照会/保存します。
テストを行ったところ、変換の仕組みに奇妙な特徴があることに気付きました。-4:00 時間オフセットを使用すると MySQL が 23 秒を追加するのに、同等のタイムゾーン ラベルを使用すると追加しない理由を誰か説明できますか?
select convert_tz('2009-06-12 01:00:00', 'UTC', '-4:00')
2009-06-11 21:00:23
select convert_tz('2009-06-12 01:00:00', 'UTC', 'US/Eastern')
2009-06-11 21:00:00
Windows XP ラップトップで MySQL 5.0.67-community-nt-log に対して実行しています。ローカルでホストされている phpMyAdmin 3.1.5 からクエリを実行していますが、PHP 5.2.8 の自分のアプリ内でも確認できます。
私の Dreamhost アカウントと比較すると、どちらのクエリも適切な日時 ('2009-09-06 21:00:00') を返します。Linux と PHP 5.2.6 で MySQL 5.0.45-log を実行しています。
自分の MySQL のインストールにこの不一致があるのはなぜですか?