2010-09-07 11 views
8

:datetime et :timestamp dans un fichier de migration semble être la même chose dans MySQL et Sqlite3, et ils mappent tous les deux à datetime dans la base de données, sauf que je ne trouve pas cela dans une documentation formelle.La date et l'horodatage de Rails dans un fichier de migration sont les mêmes pour MySQL et Sqlite3?

En outre, quand ce si notre projet Rails peut utiliser d'autres SGBD, alors devrions-nous utiliser :datetime ou :timestamp quand nous script/generate (ou rails generate) notre modèle ou Échafaudage?

Répondre

14

Je recommande d'utiliser le :datetime, car il est donc clair de savoir quoi utiliser. Je crois que les rails utilise DATETIME pour les deux dans la base de données est en raison du problème que les datetimes peuvent être représentées avec l'horodatage unix ou le champ MySQL TIMESTAMP. Comme l'horodatage est par défaut un entier 32 bits (voir Wikipedia:Timestamp), il ne peut représenter que des dates comprises entre 1901-12-13 (ou 1970-01-01 si aucune valeur négative n'est autorisée comme dans MySQL) et 2038-01-19. Après ou avant cela, il débordera. C'est le year 2038 problem. Donc, pour que tout le monde comprenne bien, nommez-le :datetime dans la migration.

Le type de données TIMESTAMP a une plage de '1970-01-01 00:00:01' UTC à '2038-01-19 03:14:07' UTC. Il a des propriétés variables, selon la version de MySQL et le mode SQL dans lequel le serveur s'exécute. Ces propriétés sont décrites plus loin dans cette section. Source

+0

Merci @jigfox pour cette information utile. Je me demande si Rails utilise 'created_at' et' updated_at' comme 'timestamp'. Ne devrait-il pas s'agir de 'datetime' car' timestamp' va créer un problème après le 19 janvier 2038? –