Meiner Erfahrung nach ist es immer gefährlich und schwierig, die richtigen Daten und Zeiten für die Programmierung festzulegen.
Ruby und Rails haben mich in diesem Fall schon immer umgangen, schon allein aufgrund der überwältigenden Anzahl von Optionen; ich habe nie eine Idee, welche ich auswählen sollte.
Wenn ich Rails und ActiveRecord-Datentypen betrachte, kann ich Folgendes finden
: datetime,: timestamp,: time und: date
und habe keine Ahnung, was die Unterschiede sind oder wo die Fallstricke lauern.
Was ist der Unterschied? Wofür benutzt du sie?
(S. Ich benutze Rails3)
Der Unterschied zwischen verschiedenen Datums- und Uhrzeitformaten in ActiveRecord hat wenig mit Rails und allem zu tun, was mit der von Ihnen verwendeten Datenbank zu tun hat.
Verwenden Sie MySQL als Beispiel (falls dies aus keinem anderen Grund am beliebtesten ist), haben Sie die Datentypen DATE
, DATETIME
, TIME
und TIMESTAMP
; Genau wie Sie CHAR
, VARCHAR
, FLOAT
und INTEGER
haben.
Also, fragst du, was ist der Unterschied? Nun, einige von ihnen sind selbsterklärend. DATE
speichert nur ein Datum, TIME
speichert nur eine Uhrzeit, während DATETIME
beide speichert.
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 TIMESTAMP
sieht aus ähnlich ist, wenn Sie es aus der Datenbank abrufen, ist es wirklich nur eine Front für a nix-Zeitstempel . Der gültige Bereich reicht von 1970 bis 2038. Der Unterschied besteht hier, abgesehen von den verschiedenen integrierten Funktionen in der Datenbank-Engine, im Speicherplatz. Da DATETIME
jede Ziffer in Jahr, Monat, Tag, Stunde, Minute und Sekunde speichert, werden insgesamt 8 Byte belegt. Da TIMESTAMP
nur die Anzahl der Sekunden seit dem 01.01.1970 speichert, werden 4 Bytes verwendet.
Sie können mehr über die Unterschiede zwischen den Zeitformaten in MySQL lesen hier .
Am Ende kommt es darauf an, was Sie in Ihrer Datums-/Zeitspalte tun müssen. Müssen Sie Daten und Zeiten vor 1970 oder nach 2038 speichern? Verwenden Sie DATETIME
. Müssen Sie sich Gedanken über die Größe der Datenbank machen und sind Sie 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
.
Trotzdem trifft Rails einige dieser Entscheidungen für Sie . Beide :timestamp
und :datetime
wird standardmäßig auf DATETIME
gesetzt, während :date
und :time
entspricht DATE
bzw. TIME
.
Dies bedeutet, dass Sie innerhalb von Rails nur entscheiden müssen, ob Sie Datum, Uhrzeit oder beides speichern möchten.
: datetime (8 Bytes)
: Zeitstempel (4 Bytes)