web-dev-qa-db-ja.com

データベースへのタイムゾーンの保存

私はMySQLとPHPを使用し、タイムゾーンをDBに保存する必要があります。少し読んで、America/Los_Angelesのようなものを使用する必要があるようです。 PSTPacific Standard TimePST8PDT+02.00などではありません。

America/Los_Angeles文字列全体を保存しますか、それとも https://stackoverflow.com/a/11580459/1032531 などの整数IDのような種類のc#について説明しますか? who文字列の場合、最大文字数はいくつですか?

15
user1032531

_America/Halifax_や_Asia/Kolkata_などのタイムゾーン文字列は、いわゆるzoneinfoデータベースのエントリを参照します。これを読む。 https://www.iana.org/time-zones 現在、Internet Assigned Numbers Authorityによって管理されています。メンテナが夏時間規則やその他の一時的な政治的なものへの変更に遅れずについていくため、状況は大きく変化します。

UNIXライクなシステムでは、エントリはファイルシステムのディレクトリ階層に保存され、コード番号ではありません。それは私の提案の成功した実装です。あなたはそれがどのように機能するかを見ることができます。

あなたは尋ねました:

_America/Los_Angeles_文字列全体を保存しますか

はい。

それには何らかの整数IDがありますか?

いいえ、アプリケーションとデータベースに将来性を持たせたい場合はそうではありません。 MySQLの一部にzoneinfoデータを保持するtime_zone_idがありますが、これらの番号を変更しないことを約束した人は誰もいません。

現在の(2019b)データベースで最も長い文字列は_America/Argentina/ComodRivadavia_です。長さは32文字です。 _mysql.time_zone_name_テーブルには、64文字で定義されたName列があります。この情報を格納するためにVARCHAR(64)を使用することには意味があります。これは、名前がシステムに保存される方法と一致します。

ちなみに、WordPressは、利用可能なタイムゾーン名の選択リスト(ドロップダウンリスト)をユーザーに提供し、ユーザーの選択をテキストとして保存します。これは模倣するのに適した例です。

http://www.iana.org/time-zones

16
O. Jones

ここをチェックしてください MySql DateTime

MySQLは、TIMESTAMP値を現在のタイムゾーンからUTCに変換して格納し、取得のためにUTCから現在のタイムゾーンに戻します。 (これは、DATETIMEなどの他のタイプでは発生しません。)デフォルトでは、各接続の現在のタイムゾーンはサーバーの時間です。時間帯は接続ごとに設定できます。タイムゾーンの設定が一定である限り、保存した値と同じ値が返されます。

タイムゾーンを維持するため、および抽出情報がタイムゾーンを変換するときに、テーブルに新しい列を追加する必要があります。

6
Laurentiu