MySQL (InnoDB) DB でいくつかの TIMESTAMP フィールドを INT に変換する必要があります。TIMESTAMP を INT に変換するのは珍しいことだと思いますが、それでもそれを行う必要があります :)
簡単に実行できるように見えますが、タイムゾーンと夏時間のエラーがいくつかあります。
列ごとに SQL コードを生成するスクリプトがあります。たとえば、次のように生成されます。
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;
を使用して前後のデータを比較するとselect FROM_UNIXTIME(1291788036);
、結果は良好に見えます。
次に、すべてのクライアント側ソフトウェアを変更して UTC に変換し、保存時にその INT を使用するという考え方です。取得時に、その INT は現在のタイム ゾーンに変換されます。
しかし、その後、ドキュメントはこのシナリオについて警告します (CET での夏時間):
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 オフセットを指定するためにデータベースにフィールドを追加する唯一の解決策はありますか?