In MySQL sono disponibili principalmente cinque tipi di dato per gestire le informazioni temporali: DATE
, TIME
, DATETIME
, TIMESTAMP
e YEAR
.
Ognuno di questi tipi ha un range di valori validi. MySQL gestisce questi dati in un formato specifico, ma accetta una varietà di formati in ingresso che è in grado di interpretare e convertire correttamente. In alternativa, vengono fornite specifiche funzioni per la conversione dei dati, come ad esempio STR_TO_DATE().
Il formato di questi tipi di dato è il seguente:
TIPO | FORMATO | RANGE |
---|---|---|
DATETIME | YYYY-MM-DD hh:mm:ss[.fraction] | da ‘1000-01-01 00:00:00’ a ‘9999-12-31 23:59:59’ |
DATE | YYYY-MM-DD | da ‘1000-01-01’ a ‘9999-12-31’ |
TIME | hh:mm:ss[.fraction] | da ‘-838:59:59.000000’ a'838:59:59.000000’ |
YEAR | YYYY | da 1901 a 2155 |
TIMESTAMP | YYYY-MM-DD hh:mm:ss[.fraction] | da ‘1970-01-01 00:00:01’ UTC a ‘2038-01-19 03:14:07’ UTC |
Il formato TIMESTAMP memorizza il dato in formato “unix type”: il tempo viene rappresentato come il numero di secondi trascorsi dalla mezzanotte del 01 gennaio 1970 (epoch) UTC. A seconda della versione del DBMS, è disponibile una risoluzione in microsecondi del timestamp.
Questa rappresentazione offre il vantaggio di gestire la data come numero intero e in modo indipendente dai fusi orari. MySQL ha funzioni dirette per convertire il formato.
Usare TIMESTAMP per data creazione e modifica del record
Il tipo TIMESTAMP
si rileva utile per memorizzare in specifiche colonne la data di creazione di un record e la data dell’ultima modifica in maniera automatica. Per fare questo è possibile definire due colonne di questo tipo:
create table test
(
...
date_created timestamp default current_timestamp() not null,
last_updated timestamp default current_timestamp() not null on update current_timestamp()
);
In questo modo, ogni volta che verrà aggiunto un record alla tabella i campi date_created
e last_updated
verranno valorizzati con il timestamp corrente. In caso di modifica del record il campo last_updated
verrà automaticamente aggiornata con il timestamp della modifica.