1. ホーム
  2. mysql

[解決済み] MySQLにタイムゾーン情報を含むdatetimeを格納する方法

2023-02-14 04:20:28

質問

私はタンザニアで撮影された何千枚もの写真を持っており、各写真が撮影された日付と時間を MySQL データベースに保存したいと思っています。しかし、サーバーは米国にあり、春の夏時間 (米国) 中の 1 時間に該当するタンザニアの日時を保存しようとすると、問題が発生します。タンザニアは夏時間を行わないので、その時間は実際に有効な時間です。

さらに複雑なのは、データベースに保存された日付時刻の値にアクセスする必要がある、さまざまなタイムゾーンの共同研究者がいることです。私は彼らに 常に をタンザニア時間として出力し、さまざまな協力者がいるローカル時間では出力されないようにしたいのです。

私はセッション時間を設定することに消極的です。なぜなら、誰かがセッション時間を設定することを忘れてしまい、時間を間違えてしまうという問題が発生することがわかっているからです。また、私はサーバーの何かを変更する権限を持っていません。

私は読みました。 サマータイムとタイムゾーンのベスト プラクティス MySQL datetime フィールドと夏時間 -- 1 時間延長を参照するにはどうすればよいですか? そして PHP/MySQL で datetime を UTC として保存する。

しかし、どれも私の特定の問題を解決していないようです。私はSQLの専門家ではありません。DATETIMEを設定するときにタイムゾーンを指定する方法がありますか?私はそれを見たことがありません。そうでなければ、この問題にアプローチする方法についてどんな提案でも大いに感謝します。

編集します。 私が遭遇している問題の例を挙げます。私はコマンドを送信します。

INSERT INTO Images (CaptureEvent, SequenceNum, PathFilename, TimestampJPG) 
VALUES (122,1,"S2/B04/B04_R1/IMAG0148.JPG","2011-03-13 02:49:10")

とエラーが出ます。

Error 1292: Incorrect datetime value: '2011-03-13 02:49:10' for column 'TimestampJPG'

この日時はタンザニアには存在しますが、データベースのあるアメリカには存在しません。

どのように解決するのですか?

あなたは言いました。

様々な協力者がいる現地時間ではなく、常にタンザニア時間で出てきて欲しいです。

このような場合、次のようにします。 ではなく は UTC を使用します。 あなたがしなければならないことは DATETIME 型の代わりに、MySQL で TIMESTAMP 型の代わりに

MySQL のドキュメントから :

<ブロッククオート

MySQLが変換する TIMESTAMP の値は、保存時には現在のタイムゾーンから UTC に変換され、検索時には UTC から現在のタイムゾーンに戻されます。(のような他の型では発生しません)。 DATETIME .)

もし、あなたが すでに を使用している場合 DATETIME を使用している場合、そもそもローカルタイムで設定されていないはずです。 データベースよりも、アプリケーションのコードに注目する必要があります(ここでは示していません)。 問題や解決策は言語によって大きく異なるので、アプリケーションコードの適切な言語を質問のタグとして付けることを忘れないようにしてください。