ライブでセットアップするために mysql テーブルをエクスポートしていますが、DB をエクスポートしているときに、日付列の値が変化していることに気付きました。" 2007-06-10 18:30:00 "、
これはなぜですか?
誰もこれについて考えていますか?
バグ #13052は 5.0.15 より前のバージョンの MySQL に存在し、ダンプ ファイルはサーバーのタイムゾーンで列を表していましたが、ダンプ ファイルを読んでいる人 (または後続のサーバー) がそれを理解できるようにTIMESTAMP
するコマンドが含まれていませんでした。このようなコマンドがない場合、受信サーバーはすべての値がデフォルトのタイムゾーンにあるSET TIME_ZONE
と想定します。TIMESTAMP
したがって、18:30 までにオフセットされたタイムゾーン (南オーストラリアからカリフォルニアへなど) でのサーバー間の転送は、観察された動作につながります。
この問題の解決策は、漠然とした優先順位で次のとおりです。
元のサーバーの mysqldump のバージョンを 5.0.15 以降にアップグレードします (その結果、ダンプファイルはすべてのTIMESTAMP
値を UTC で表し、先頭に適切なSET TIME_ZONE
ステートメントが含まれます)。
エクスポート (またはインポート) する前に、ソース (または宛先) サーバーのグローバルtime_zone
変数を変更して、インポート (またはエクスポート) 時の他のサーバーの設定と一致するようにします。
SET GLOBAL time_zone = 'America/Los_Angeles'; -- ('Australia/Adelaide')
UPDATE
事後のデータ、MySQL のCONVERT_TZ()
関数を適用:
UPDATE my_table
SET my_column = CONVERT_TZ(
my_column,
'America/Los_Angeles',
'Australia/Adelaide'
);
解決策 2 または解決策 3 のいずれかを使用する場合は、夏時間を含むように、関連するサーバーの変数の正確なタイムゾーンを使用するように注意してください。time_zone
ただし、MySQL Server Time Zone Supportの下に記載されているように、 「名前付きタイム ゾーンは、mysql データベース内のタイム ゾーン情報テーブルが作成され、入力されている場合にのみ使用できます。」ということに注意してください。タイムゾーン情報テーブル。