私たちのMySQL(InnoDB)DBでは、TIMESTAMPフィールドをINTに変換する必要があります。私はTIMESTAMPをINTに変換することは珍しいことに気づいていますが、それでもやる必要があります。TIMESTAMPからINTEGERに変換するMysql - タイムゾーン
これは簡単なことですが、タイムゾーンや夏時間エラーがあります。
私はSQLコードを列ごとに生成するスクリプトを持っています。例えば、それが生成する:私は前とselect FROM_UNIXTIME(1291788036);
を使用してデータの後に比較すると
ALTER TABLE alarmLog ADD COLUMN started_tmp INT UNSIGNED;
UPDATE alarmLog SET started_tmp = UNIX_TIMESTAMP(started);
ALTER TABLE alarmLog DROP started;
alter TABLE alarmLog CHANGE started_tmp started INT UNSIGNED NULL DEFAULT 0;
、結果はよさそうです。
考えてみると、すべてのクライアント側のソフトウェアをUTCに変換し、そのINTを使用して格納することです。取得するとき、そのINTは現在のタイムゾーンに変換されます。
しかし、このシナリオ(CETで夏時間)に関するドキュメントwarn me:
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 02:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
どのAPIやOSのは、通常、夏時間に対処するのですか?私のPCは、夏時間にUTCで時計を持っていることが分かっていますが、OSには2時間が追加され、冬には1時間追加されます。私はそれがDSTかどうかを判断するためにUTC時間を使用すると仮定します。
どうすればこの問題に対処できますか? DSTオフセットを指定するためのフィールドをデータベースに追加する唯一のソリューションですか?
サマータイムは異なるタイムゾーンです。例えば。 CETは中央ヨーロッパ時間、CESTは中央ヨーロッパ夏時間です。お使いのOSは、いつ切り替えるべきかを知っています。タイムスタンプにUTCを使用している限り、ローカルタイムに変換するのはプレゼンテーションレイヤーまでです。 –