La différence entre les différents formats de date / heure dans ActiveRecord a peu à voir avec Rails et tout à voir avec la base de données que vous utilisez.
En utilisant MySQL comme un exemple (si pour aucune autre raison parce qu'il est le plus populaire), vous avez DATE
, DATETIME
, TIME
et les TIMESTAMP
types de données de colonne; comme vous l' avez CHAR
, VARCHAR
, FLOAT
et INTEGER
.
Alors, demandez-vous, quelle est la différence? Eh bien, certains d'entre eux sont explicites. DATE
stocke uniquement une date, TIME
stocke uniquement une heure de la journée, tandis que DATETIME
stocke les deux.
La différence entre DATETIME
et TIMESTAMP
est un peu plus subtile: DATETIME
est formatée en YYYY-MM-DD HH:MM:SS
. Les plages valides vont de l'année 1000 à l'année 9999 (et tout le reste. Bien que cela TIMESTAMP
semble similaire lorsque vous le récupérez dans la base de données, c'est vraiment juste un front pour un horodatage Unix . Sa plage valide va de 1970 à 2038. La différence ici, en plus des diverses fonctions intégrées dans le moteur de base de données, est l'espace de stockage. Parce qu'il DATETIME
stocke chaque chiffre de l'année, du mois, de l'heure, des minutes et des secondes, il utilise un total de 8 octets. Comme TIMESTAMP
ne stocke que le nombre de secondes depuis le 01/01/1970, il utilise 4 octets.
Vous pouvez en savoir plus sur les différences entre les formats d'heure dans MySQL ici .
En fin de compte, cela revient à ce que vous avez besoin de votre colonne date / heure. Avez-vous besoin de stocker des dates et heures avant 1970 ou après 2038? Utilisez DATETIME
. Avez-vous besoin de vous soucier de la taille de la base de données et vous êtes dans cette plage horaire? Utilisez TIMESTAMP
. Avez-vous seulement besoin de stocker une date? Utilisez DATE
. Avez-vous seulement besoin de stocker un temps? Utilisez TIME
.
Cela dit, Rails prend en fait certaines de ces décisions pour vous . Les deux :timestamp
et :datetime
seront par défaut DATETIME
, tandis que :date
et :time
correspond à DATE
et TIME
, respectivement.
Cela signifie qu'au sein de Rails, vous n'avez qu'à décider si vous devez stocker la date, l'heure ou les deux.
TIME
colonne de MySQL n'est pas strictement un "moment de la journée", car elle accepte des heures> 24; il est également utilisable comme "temps écoulé".: datetime (8 octets)
: horodatage (4 octets)
la source
Voici une explication impressionnante et précise que j'ai trouvée.
source: https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant .
Aussi...
table avec différents types de colonne "date" et types de migration de rails correspondants en fonction de la base de données
la source