Dans Ruby on Rails, Quelle est la différence entre DateTime, Timestamp, Time et Date?
d'après mon expérience, obtenir des dates/heures correctes alors que la programmation est toujours chargée de dangers et de difficultés.
Ruby et les Rails m'ont toujours échappé sur celle-ci, ne serait-ce qu'en raison du grand nombre d'options; je n'ai jamais la moindre idée de ce que je devrais choisir.
lorsque j'utilise des Rails et que je regarde les types de données ActiveRecord, je peux trouver ce qui suit
et n'ont aucune idée de ce que sont les différences ou où se cachent les gotchas.
quelle différence? Que voulez-vous utiliser?
(P. M. j'utilise Rails3)
2 réponses
la différence entre les différents formats date/heure dans ActiveRecord a peu à voir avec les Rails et tout à voir avec n'importe quelle base de données que vous utilisez.
en utilisant MySQL comme exemple( si pour aucune autre raison parce que c'est le plus populaire), vous avez DATE
, DATETIME
, TIME
et TIMESTAMP
types de données de colonne; tout comme vous avez CHAR
, VARCHAR
, FLOAT
et INTEGER
.
ainsi, vous demandez, ce qui est le la différence? Eh bien, certains d'entre eux sont auto-explicatif. DATE
ne conserve qu'une date, TIME
ne conserve qu'une heure de la journée, tandis que DATETIME
conserve les deux.
la différence entre DATETIME
et TIMESTAMP
est un peu plus subtile: DATETIME
est formaté comme YYYY-MM-DD HH:MM:SS
. Plages valides vont de l'an 1000 à l'an 9999 (et tout entre les deux. Alors que TIMESTAMP
ressemble similaire lorsque vous le récupérez à partir de la base de données, il est vraiment une façade pour un timestamp unix . Sa portée valide va de 1970 à 2038. La différence ici, en dehors des diverses fonctions intégrées dans le moteur de base de données, est l'espace de stockage. Parce que DATETIME
stocke chaque chiffre dans l'année, le jour du mois, l'heure, la minute et la seconde, il utilise un total de 8 octets. Comme TIMESTAMP
ne stocke que le nombre de secondes depuis 1970-01-01, il utilise 4 octets.
Vous pouvez en savoir plus sur les différences entre les formats de temps dans MySQL ici .
à la fin, cela se résume à ce que vous avez besoin de votre date/heure colonne à faire. Devez-vous conserver les dates et les 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 ce décalage horaire? Utilisez TIMESTAMP
. Avez-vous seulement besoin de stocker une date? Utilisez DATE
. Avez-vous seulement besoin de stocker une fois? Utilisez TIME
.
Ayant dit tout ceci, Rails fait en fait certaines de ces décisions pour vous . :timestamp
et :datetime
seront par défaut à DATETIME
, tandis que :date
et :time
correspond à DATE
et TIME
, respectivement.
cela signifie que dans les Rails, vous n'avez qu'à décider si vous devez stocker la date, l'heure ou les deux.
-
:datetime (8 octets)
- Stores date and Time formatted AAAA-MM-JJ HH: MM: SS
- utile pour les colonnes comme birth_date
-
: timestamp (4 octets)
- nombre de secondes depuis 1970-01-01
- utile pour les colonnes comme updated_at, created_at
- : date (3 octets)
- Stocke La Date
- :le temps (3 octets)
- Banques De Temps