0


1

UTCの日時値をMySQLに格納しています。 データベース内のUTCとの間でローカル日時を照会/保存するためのタイムゾーン変換を処理するには、CONVERT_TZを使用します。

テストしたところ、変換がどのように機能するかに、この奇妙な特殊性があることに気付きました。 MySQLが-4:00時間オフセットを使用した場合に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'、 'アメリカ/東部')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')を返します。 彼らはMySQL 5.0.45-logをLinuxとPHP 5.2.6で動かしています。

自分でインストールしたMySQLにこの矛盾があるのはなぜですか?

1 Answer


2


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

UNIXマシンでは、それらは通常システムのタイムゾーンファイルから生成されますが、あなたのwindowsインストールはおそらくmysqlによって提供されるファイルを使用しました:

そのデータでうるう秒が有効になっています。 無効にするには、このアップデートを実行します。

Use mleql.time_zone set Use_leap_seconds = 'N';を更新します。

その後、サーバーを再起動してください。