Der Unterschied zwischen verschiedenen Datums- / Uhrzeitformaten in ActiveRecord hat wenig mit Rails zu tun und alles mit der von Ihnen verwendeten Datenbank.
Mit MySQL als ein Beispiel (wenn aus keinem anderen Grund , weil es beliebteste), haben Sie DATE
, DATETIME
, TIME
und TIMESTAMP
Spaltendatentypen; so wie Sie haben CHAR
, VARCHAR
, FLOAT
und INTEGER
.
Sie fragen sich also, was ist der Unterschied? Nun, einige von ihnen sind selbsterklärend. DATE
speichert nur ein Datum, TIME
speichert nur eine Tageszeit, während DATETIME
beide gespeichert werden.
Der Unterschied zwischen DATETIME
und TIMESTAMP
ist etwas subtiler: DATETIME
ist formatiert als YYYY-MM-DD HH:MM:SS
. Gültige Bereiche reichen vom Jahr 1000 bis zum Jahr 9999 (und alles dazwischen. Während es beim Abrufen aus der Datenbank ähnlich TIMESTAMP
aussieht , ist es wirklich nur eine Front für einen Unix-Zeitstempel . Der gültige Bereich reicht von 1970 bis 2038. Der Unterschied Abgesehen von den verschiedenen integrierten Funktionen in der Datenbank-Engine ist hier Speicherplatz vorhanden. Da DATETIME
jede Ziffer in Jahr, Monat, Tag, Stunde, Minute und Sekunde gespeichert wird, werden insgesamt 8 Byte verbraucht. Da TIMESTAMP
nur die Nummer gespeichert wird von Sekunden seit dem 01.01.1970 werden 4 Bytes verwendet.
Weitere Informationen zu den Unterschieden zwischen Zeitformaten in MySQL finden Sie hier .
Am Ende kommt es darauf an, wozu Sie Ihre Datums- / Zeitspalte benötigen. Müssen Sie Daten und Zeiten vor 1970 oder nach 2038 speichern? Verwenden Sie DATETIME
. Müssen Sie sich Gedanken über die Datenbankgröße machen und befinden sich innerhalb dieses Zeitbereichs? Verwenden Sie TIMESTAMP
. Müssen Sie nur ein Datum speichern? Verwenden Sie DATE
. Müssen Sie nur eine Zeit speichern? Verwenden Sie TIME
.
Nach alledem trifft Rails tatsächlich einige dieser Entscheidungen für Sie . Sowohl :timestamp
und :datetime
wird standardmäßig zu DATETIME
, während :date
und :time
entspricht DATE
und TIME
jeweils.
Dies bedeutet, dass Sie innerhalb von Rails nur entscheiden müssen, ob Sie Datum, Uhrzeit oder beides speichern müssen.
TIME
Spalte von MySQL ist nicht unbedingt eine "Tageszeit", da sie Stunden> 24 akzeptiert. Es kann auch als "verstrichene Zeit" verwendet werden.: datetime (8 Bytes)
: Zeitstempel (4 Bytes)
quelle
Hier ist eine großartige und präzise Erklärung, die ich gefunden habe.
Quelle: https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant .
Ebenfalls...
Tabelle mit unterschiedlichen Spalten- "Datumstypen" und entsprechenden Rails-Migrationstypen, abhängig von der Datenbank
quelle