-
In genere, non dovresti fare nessuna delle due cose:i tipi di dati nel livello del database dovrebbero essere significativi (il più possibile) da soli e non dipendere dalla tua applicazione per interpretarli. Come dice @Jim DeLaHunt , ciò consente al database di manipolarli/interpretarli facilmente da SQL come richiesto (e ti consente anche di accedere facilmente agli stessi dati da un'altra base di codice dell'applicazione in futuro).
MySQL ha cinque tipi temporali , solo due dei quali memorizzano sia una data che un'ora:
DATETIME
eTIMESTAMP
.Come altri hanno già accennato, la differenza sta nel fatto che si desidera memorizzare il fuso orario, anche se lo trovo un modo piuttosto confuso di vederlo:
-
TIMESTAMP
utilizza iltime_zone
della sessione variabile per convertire l'input in un timestamp UTC e poi di nuovo per l'output:è utile per specificare un momento esatto nel tempo; -
DATETIME
memorizza semplicemente la data e l'ora indipendentemente dal fuso orario, proprio come fotografare un calendario e un orologio:è utile per specificare un evento che si verifica nella stessa ora locale a livello globale.
-
-
Proprio come dichiareresti qualsiasi altra colonna, specifichi il tipo di dati pertinente dopo il nome della colonna.
Attenzione a quel
TIMESTAMP
ha funzionalità aggiuntive, come aggiornamento automatico , che potresti voler disabilitare nella tua dichiarazione di colonna, se lo desideri. -
Utilizzando uno dei tipi temporali di cui sopra, sarai in grado di fare tutto questo (usando funzioni data come richiesto). L'output predefinito di
TIMESTAMP
eDATETIME
tipi è una stringa in'YYYY-MM-DD HH:MM:SS'
formato.In particolare, il "tempo trascorso" dal confronto di due valori potrebbe ad esempio essere ottenuto con
TIMEDIFF()
funzione:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...