-
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:
DATETIMEeTIMESTAMP.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:
-
TIMESTAMPutilizza iltime_zonedella 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; -
DATETIMEmemorizza 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
TIMESTAMPha 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
TIMESTAMPeDATETIMEtipi è 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 ...