Ho bisogno di convertire alcuni campi TIMESTAMP in INT nel nostro DB MySQL (InnoDB). Mi rendo conto che la conversione di un TIMESTAMP in INT è inusuale, ma dobbiamo ancora farlo :)Mysql conversione da TIMESTAMP a INTEGER - fusi orari
Sembra abbastanza semplice da fare, ma ci sono alcuni errori di fuso orario e di ora legale.
Ho uno script che genera il mio codice SQL per colonna. Per esempio, genera:
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;
Se confronto prima e dopo i dati utilizzando select FROM_UNIXTIME(1291788036);
, il risultato sembra buono.
L'idea è quindi di cambiare tutto il software lato client per convertire in UTC e utilizzare quello INT quando lo si archivia. Quando si recupera, INT viene convertito nel fuso orario corrente.
ma poi la documentazione warn me su questo scenario (ora legale in 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)
Come API e sistemi operativi normalmente si occupano di risparmio di luce del giorno? So che il mio PC ha il suo orologio in UTC e in estate, il sistema operativo aggiunge due ore ad esso, e in inverno uno. Presumo che usi l'ora UTC per determinare se è l'ora legale o meno.
Quindi, come faccio a gestire questo? È l'unica soluzione per aggiungere un campo al database per specificare l'offset dell'ora legale?
L'ora legale è un fuso orario diverso. Per esempio. CET è Central European Time, CEST è l'ora legale dell'Europa centrale. Il tuo sistema operativo sa quando cambiare. Finché usi UTC per i timestamp, è compito del livello di presentazione convertirlo in ora locale. –