La differenza tra diversi formati di data / ora in ActiveRecord ha poco a che fare con Rails e tutto a che fare con qualunque database tu stia utilizzando.
Utilizzando MySQL come esempio (se non altro perché è più popolare), si dispone DATE
, DATETIME
, TIME
e TIMESTAMP
tipi di dati di colonna; proprio come avete CHAR
, VARCHAR
, FLOAT
e INTEGER
.
Quindi, chiedi, qual è la differenza? Bene, alcuni di loro sono autoesplicativi. DATE
memorizza solo una data, TIME
memorizza solo l'ora del giorno, mentre DATETIME
memorizza entrambi.
La differenza tra DATETIME
e TIMESTAMP
è un po 'più sottile: DATETIME
è formattata come YYYY-MM-DD HH:MM:SS
. Gli intervalli validi vanno dall'anno 1000 all'anno 9999 (e tutto il resto. Mentre TIMESTAMP
sembra simile quando lo recuperi dal database, è davvero solo un fronte per un timestamp unix . Il suo intervallo valido va dal 1970 al 2038. La differenza qui, a parte le varie funzioni integrate nel motore di database, c'è lo spazio di archiviazione. Poiché DATETIME
memorizza ogni cifra dell'anno, mese giorno, ora, minuto e secondo, utilizza un totale di 8 byte. Poiché TIMESTAMP
memorizza solo il numero di secondi dal 1970-01-01, utilizza 4 byte.
Puoi leggere di più sulle differenze tra i formati di tempo in MySQL qui .
Alla fine, si riduce a ciò di cui hai bisogno per fare la colonna data / ora. Devi memorizzare date e orari prima del 1970 o dopo il 2038? Usa DATETIME
. Devi preoccuparti delle dimensioni del database e ti trovi in quel intervallo di tempo? Usa TIMESTAMP
. Devi solo memorizzare una data? Usa DATE
. Devi solo conservare un orario? Usa TIME
.
Detto questo, Rails in realtà prende alcune di queste decisioni per te . Entrambi :timestamp
e :datetime
saranno impostati su DATETIME
, while :date
e :time
corrisponde rispettivamente a DATE
e TIME
, rispettivamente.
Ciò significa che all'interno di Rails devi solo decidere se memorizzare la data, l'ora o entrambi.