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?
En supposant que vous utilisez MS SQL Server (ce que vous n'êtes pas, voir la mise à jour ci-dessous ):
Une table ne peut avoir qu'une seule colonne d'horodatage. La valeur de la colonne timestamp est mise à jour chaque fois qu'une ligne contenant une colonne timestamp est insérée ou mise à jour. Cette propriété fait qu'une colonne d'horodatage est un mauvais candidat pour les clés, en particulier les clés primaires. Toute mise à jour de la ligne modifie la valeur de l'horodatage, modifiant ainsi la valeur de la clé. Si la colonne est dans une clé primaire, l'ancienne valeur de clé n'est plus valide et les clés étrangères faisant référence à l'ancienne valeur ne sont plus valides. Si la table est référencée dans un curseur dynamique, toutes les mises à jour modifient la position des lignes dans le curseur. Si la colonne est dans une clé d'index, toutes les mises à jour de la ligne de données génèrent également des mises à jour de l'index.
Informations sur MSDN
Si vous devez stocker des informations de date/heure sur une ligne et ne pas modifier cette date/heure, utilisez DateTime. sinon, utilisez Horodatage.
Remarque: Les champs d'horodatage de MS SQL Server ne sont pas des dates ni des heures, ils sont des représentations binaires de la séquence relative du moment où les données ont été modifiées.
Comme vous l'avez mis à jour pour dire MySQL:
Les valeurs TIMESTAMP sont converties du fuseau horaire actuel en UTC pour le stockage, puis reconverties d’UTC vers le fuseau horaire actuel pour être extraites. (Cela se produit uniquement pour le type de données TIMESTAMP, pas pour d'autres types tels que DATETIME.)
Citation de référence MySQL
Plus particulièrement:
Si vous stockez une valeur TIMESTAMP, puis modifiez le fuseau horaire et récupérez la valeur, la valeur extraite est différente de la valeur que vous avez stockée.
Par conséquent, si vous utilisez une application sur plusieurs fuseaux horaires et que vous avez besoin d'une date/heure reflétant les paramètres de chaque utilisateur, utilisez l'horodatage. Si vous avez besoin de cohérence quel que soit le fuseau horaire, utilisez Date/heure.
Voir Devrais-je utiliser le champ 'datetime' ou 'timestamp'?? Il couvre de manière exhaustive le sujet.
EDIT - Juste pour résumer les propriétés de MySQL et mon expérience avec lui-
Horodatage -
a) 4 octets par colonne (contre 8 pour datetime)
b) stocké en interne sous forme d'entier
c) A des informations sur le fuseau horaire!
d) Toutes les fonctions DATE ()/DAY ()/MONTH () fonctionnent à la fois pour TIMESTAMP et DATETIME
e) Dans MySQL, vous pouvez avoir plusieurs TIMESTAMPS par table
f) le premier TIMESTAMP d'une table est automatiquement mis à jour ...
J'ai utilisé plusieurs horodatages à d'autres fins. J'avais besoin de gagner de la place (je devais faire très attention et garder toutes ces questions à l'esprit.
Mon conseil, optez pour TIMESTAMP à des fins autres que l’horodatage, si vous savez ce que vous faites. Et si SPACE est une préoccupation majeure (par exemple, 15 000 000 de lignes et de plus en plus nombreuses et 8 fois!))
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
DateTime
type, vous pouvez travailler avec les fonctions associées à DATE()
, alors que sur timestamp
vous ne pouvez pas.Timestamp
ne peut pas contenir de valeurs avant 01-01-1970
.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