Stai registrando il momento nel tempo in cui si è verificata un'azione dell'utente. Questo è comunemente chiamato un timestamp. Sfortunatamente, la memorizzazione dei timestamp nei database è più complicata di quanto la maggior parte delle persone realizzi e la soluzione corretta dipende dalla particolare implementazione del database che si sta utilizzando.
Si desidera registrare il momento in cui si è verificato un evento, in questo caso un'azione dell'utente. Ci sono due modi comuni per rappresentare un momento nel tempo: come un fuso orario locale insieme a un fuso orario compensato dal Tempo medio di Greenwich, o come un numero di secondi (o millisecondi o nanosecondi) da qualche momento nel passato ( inizio di epoca ). Sfortunatamente, generalmente nessun tipo di SQL supporta uno di questi. I tipi DATE e DATETIME non registrano un fuso orario e pochi database hanno qualsiasi tipo rappresentato come "time since start of epoch". Lo standard SQL definisce un tipo "TIMESTAMP WITH TIMEZONE" ma pochi database popolari lo supportano.
La maggior parte degli sviluppatori si compromette usando DATETIME con un certo fuso orario implicito. Se lo fai, dovrai stare attento a registrare tutte le volte nello stesso fuso orario. L'unico che ha senso è registrare tutti i tempi in GMT. Impostare il fuso orario del server predefinito su GMT e impostare il fuso orario del database su GMT, se applicabile. Devi essere molto attento a convertire correttamente i tipi di dati delle applicazioni nel fuso orario corretto prima di registrarli nel database.
In alternativa, puoi registrare i timestamp come offset numerico da qualche punto nel passato. Il sistema Unix e le sue derivate e il runtime Java rappresentano il tempo in secondi dal 1970-01-01 alle 00:00 GMT. Se lo fai, potresti voler definire le viste che convertono queste in una rappresentazione leggibile.