2015-11-01 8 views
8

私はMySQLとPHPを使用し、DBにタイムゾーンを格納する必要があります。ビットはその上に読んで過ごし、私はAmerica/Los_Angelesのようなものを使用する必要があるように思える、とない、Pacific Standard TimePST8PDT+02.00などデータベースにタイムゾーンを保存する

私は全体America/Los_Angeles文字列を格納、または何らかのがありますそれの整数IDはhttps://stackoverflow.com/a/11580459/1032531のように記述します。 who文字列の場合、最大文字数はどれくらいですか?

答えて

6

America/New_Yorkのようなタイムゾーン文字列は、いわゆるzoneinfoデータベースのエントリを参照しています。これを読む。 https://www.iana.org/time-zones現在、インターネット割り当て番号機関によって管理されています。保守担当者は、夏時間のルールやその他の一時的な政治的な変更に追いつくためにスクランブルするので、多くの変更があります。

UNIX系システムでは、エントリはファイルシステムのディレクトリ階層に格納されており、コード番号ではありません。

あなたは尋ねた:

を、私は全体America/Los_Angeles文字列

はいを​​保存してください。

ある種の整数IDがありますか?

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

現在の(2015g)データベースの最長文字列は "America/Argentina/ComodRivadavia"です。それは32文字です。この情報を保存するためにVARCHAR(64)を使用すると理にかなっています。

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

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

4

ここでチェックMySql DateTime

MySQLのストレージのためにUTCに現在の時間帯からTIMESTAMP値を変換し、バックUTCからの検索のための現在のタイムゾーンへ。 (これはDATETIMEなどの他のタイプでは発生しません)。デフォルトでは、各接続の現在のタイムゾーンはサーバーの時刻です。タイムゾーンは、接続ごとに設定できます。タイムゾーンの設定が一定のままであれば、保存した値と同じ値が返されます。

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

+1

あなたが参照「あなたのタイムゾーンを維持するために、あなたのテーブルに新しい列」を記述してください。 – user1032531

+1

データベースがあなたのdatetimeを変換する前の正確なタイムゾーンを知る必要がある場合は、それを保持する必要があります。データベースは自動的にサーバータイムゾーンでdatetimeを変換して保存するためです。 – Laurentiu

+0

私はそれを格納するために 'VARCHAR(32)'を使うべきですか?それはすべてのタイムゾーンで十分な大きさですか?また、タイムゾーン用の整数IDがないことを確認してください。 – user1032531

関連する問題