Mysql
 sql >> Database >  >> RDS >> Mysql

Come memorizzare al meglio data/ora in MySql?

  1. 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 e TIMESTAMP .

    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 il time_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.

  2. 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.

  3. 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 e DATETIME 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  ...