Die Datums- und Zeitstempel von Rails in einer Migrationsdatei sind für MySQL und Sqlite3 identisch?

8

: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?

    
太極者無極而生 07.09.2010, 06:58
quelle

1 Antwort

14

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

    
jigfox 07.09.2010, 09:50
quelle