2010-09-07 10 views
8

:datetime y :timestamp en un archivo de migración parece lo mismo en MySQL y Sqlite3, y ambos se asignan a datetime en el lado de la base de datos, excepto que no puedo encontrar eso en una documentación formal.La fecha y hora de Rails en un archivo de migración son las mismas para MySQL y Sqlite3?

Además, ¿qué pasa cuando si nuestro proyecto raíles pueden utilizar otros DBMS, entonces debemos utilizar :datetime o :timestamp cuando script/generate (o rails generate) nuestro modelo o andamio?

Respuesta

14

Recomendaría usar el :datetime, porque entonces está claro qué usar. Creo que Rails está usando DATETIME para ambos en la base de datos debido al problema de que la fecha y hora es representable con la marca de tiempo de Unix o el campo TIMESTAMP de MySQL. Dado que la marca de tiempo es por defecto un entero de 32 bits (consulte Wikipedia:Timestamp), solo puede representar fechas entre 1901-12-13 (o 1970-01-01 si no se permiten valores negativos como en MySQL) y 2038-01-19. Después o antes, se desbordará. Este es el year 2038 problem.

Para que quede claro para todos, lo llamaría :datetime en la migración.

El tipo de datos TIMESTAMP tiene un rango de '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC. Tiene diferentes propiedades, dependiendo de la versión de MySQL y del modo SQL en el que se ejecuta el servidor. Estas propiedades se describen más adelante en esta sección. Source

+0

Gracias @jigfox por esta información útil. Me pregunto si Rails usa 'created_at' y' updated_at' como 'timestamp'. ¿No debería ser 'datetime' ya que' timestamp' creará un problema después del 19 de enero de 2038? –

Cuestiones relacionadas