J'ai cherché cela, mais pas de réponses claires (surtout sur ce dernier). Dans quels cas devriez-vous utiliser une date / heure ou un horodatage?
Réponses
Trop de publicités?En supposant que vous êtes à l'aide de MS SQL Server (que vous ne l'êtes pas, voir la mise à Jour ci-dessous):
Une table ne peut avoir qu'un timestamp la colonne. La valeur du timestamp la colonne est mise à jour chaque fois qu'une ligne contenant une colonne de type timestamp est insérées ou mises à jour. Cette propriété fait une colonne de type timestamp mauvais candidat pour les touches, surtout au niveau primaire les touches. Toute mise à jour apportées à la ligne les modifications de la valeur d'horodatage, ce qui la modification de la valeur de la clé. Si la colonne est dans une clé primaire, l'ancienne valeur de la clé de n'est plus valide, et les clés étrangères faisant référence à l'ancien de la valeur sont pas est plus valide. Si la table est référencé dans un curseur dynamique, tous les les mises à jour de changer la position de la lignes du curseur. Si la colonne est dans un index de clé, toutes les mises à jour de la ligne de données génèrent également des mises à jour de la index.
Informations sur MSDN
Si vous avez besoin de stocker des informations de date/heure à l'encontre d'une ligne, et ne pas avoir que de la date/heure de modification, utilisation DateTime; sinon, l'utilisation d'Horodatage.
À Noter également: MS SQL Server champs d'horodatage ne sont pas les Dates ni les Temps, ils sont des représentations binaires de la séquence relative de lorsque les données ont été modifiées.
Mise à jour
Comme vous l'avez mis à jour-à-dire de MySQL:
Des valeurs d'HORODATAGE sont convertis à partir de le fuseau horaire actuel à l'UTC pour de stockage, et de nouveau converti à partir UTC le fuseau horaire actuel pour de la récupération. (Cela se produit uniquement pour les Type de données TIMESTAMP, pas pour d'autres les types comme DATETIME.)
Citation de Référence de MySQL
Plus particulièrement:
Si vous stockez une valeur d'HORODATAGE, et puis changer de fuseau horaire et de récupérer la valeur, la valeur récupérée est différente de la valeur stockée.
Donc, si vous utilisez une application à travers les fuseaux horaires, et ont besoin de la date/heure de refléter les paramètres utilisateurs, l'utilisation d'Horodatage. Si vous avez besoin de cohérence quel que soit le fuseau horaire, l'utilisation Datetime
Voir datetime vs timestamp? Il dispose d'une couverture complète sur le sujet.
EDIT - Juste pour résumer les propriétés de MySQL et mon expérience avec elle-
Timestamp -
a) 4 octets par colonne (contre 8 pour le type datetime)
- INFÉRIEURE de la PLAGE ('1970-01-01 00:00:01' UTC '2038-01-09 03:14:07' UTC ) QUE DATETIME - Donc certainement ne pas l'utiliser pour la date de naissance etc. La plupart des modèles d'utilisation sont réellement un 'Timestamp' de 'MAINTENANT' pour des activités comme la ligne des mises à jour, etc etc.
b) stocké en interne comme un entier
- Performance sage... mon expérience personnelle a été ambigu.. parfois, c'est plus rapide... parfois plus lent que DATETIME. Ça prend moins de place.
c) A fuseau horaire info!
- si - si-je ajouter 2011-01-01 3:30' TIMESTAMP (avec curr timezone EST - Boston).. plus tard, j'ai changer le serveur mysql et le fuseau horaire à la TVP(californie) et de redémarrage du serveur - la valeur changera à "2011-01-01 00:00' -- (MERCI de CONFIRMER... j'avais testé il y a longtemps). Cependant, DATETIME restera le même.
d) Tous les DATE() / JOUR() / MOIS() les fonctions de travail pour les deux DATETIME et TIMESTAMP
e) Dans MySQL, vous pouvez avoir plusieurs HORODATEURS par table
- (OUI, mais un seul d'entre eux (le premier) sera mis à jour automatiquement avec le temps de la ligne de mise à jour, aussi... seulement on peut être faite de ne PAS NULL (le premier))
f) premier HORODATAGE dans une table est mise à jour automatiquement...
- soyez donc prudent si vous les utiliser pour d'autres fins.. et que vous souhaitez autoriser les valeurs null. (null stockées en tant que '0000-00-00 00:00:00' dans les deux DATETIME et TIMESTAMP)
J'ai utilisé plusieurs des horodateurs pour d'autres fins.. besoin de l'espace économisé (fallait être très prudent et de garder toutes ces questions à l'esprit.
Mon conseil, allez-TIMESTAMP pour les non timestamp seulement si tu sais ce que tu fais.. et si l'ESPACE est une préoccupation énorme (mon ex - 15 000 000 de lignes et de croissance et 8 datetimes!))
Je n'ai pas bien compris votre question, mais voyez le lien ci-dessous. cela peut vous aider
http://www.sqlteam.com/article/timestamps-vs-datetime-data-types
- Dans MySQL, sur
DateTime
vous pouvez travailler avecDATE()
des fonctions connexes, alors que surtimestamp
vous ne pouvez pas. -
Timestamp
ne peut pas contenir de valeurs avant01-01-1970
. - En outre, l’un d’eux tient l’heure avancée du jour et l’autre ne le fait pas (je ne me rappelle plus lequel pour le moment)
J'ai tendance à toujours choisir DateTime
.
Besoin de spécifier le serveur de base de données.
Certains moteurs de serveur mettront automatiquement à jour les champs d'horodatage, de sorte qu'il puisse être utilisé comme version d'enregistrement dans Optimistic Locking