:datetime
und :timestamp
in einer Migrationsdatei scheinen in MySQL und Sqlite3 identisch zu sein, und sie verweisen beide auf datetime
auf der Datenbankseite, außer dass ich das in einer formellen Dokumentation nicht finden kann.
Und wenn wir in unserem Rails-Projekt andere DBMS verwenden, sollten wir dann :datetime
oder :timestamp
verwenden, wenn wir script/generate
(oder rails generate
) unser Model oder Scaffold verwenden?
Ich würde empfehlen, die :datetime
zu verwenden, weil so klar ist, was zu verwenden ist. Ich glaube, dass Rails DATETIME
für beide in der DB verwendet, ist auf das Problem zurückzuführen, dass die Datumsangaben mit dem Unix-Timestamp oder dem MySQL TIMESTAMP
-Feld darstellbar sind. Da Timestamp standardmäßig ein 32bit Integer ist (siehe Wikipedia: Timestamp ), kann es nur Daten zwischen 1901-12-13
( oder 1970-01-01
, wenn keine negativen Werte erlaubt sind wie in MySQL ) und 2038-01-19
. Nach oder davor wird es überlaufen. Dies ist das Jahr 2038 Problem .
Um es allen klar zu machen, würde ich es bei der Migration als :datetime
bezeichnen.
Der Datentyp TIMESTAMP hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC. Abhängig von der MySQL-Version und dem SQL-Modus, in dem der Server ausgeführt wird, hat er unterschiedliche Eigenschaften. Diese Eigenschaften werden später in diesem Abschnitt beschrieben. Quelle
Tags und Links datetime ruby-on-rails migration timestamp