0

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 のインストールにこの不一致があるのはなぜですか?

4

1 に答える 1

2

おそらく、タイムゾーン テーブルは 2 つのインストールで異なります。タイムゾーン データは、mysql データベースの一連のテーブルに格納されます。

Unix マシンでは、通常、システムのタイムゾーン ファイルから生成されますが、Windows のインストールでは、mysql が提供するファイルを使用した可能性があります。

http://dev.mysql.com/downloads/timezones.html

そのデータにはうるう秒が有効になっています。それらを無効にするには、この更新を実行できます。

update mysql.time_zone set Use_leap_seconds ='N';

その後、サーバーを再起動します。

于 2009-06-12T22:54:44.360 に答える