Quand utiliser datetime ou timestamp

J’ai cherché ceci mais aucune réponse claire (surtout sur ce dernier). Dans quels cas devez-vous utiliser une date / heure ou un horodatage?

En supposant que vous utilisez MS SQL Server (ce que vous n’êtes pas, consultez la mise à jour ci-dessous ):

Une table ne peut avoir qu’une seule colonne d’horodatage. La valeur de la colonne d’horodatage est mise à jour chaque fois qu’une ligne contenant une colonne d’horodatage est insérée ou mise à jour. Cette propriété fait de la colonne d’horodatage un mauvais candidat pour les clés, en particulier les clés primaires. Toute mise à jour effectuée sur la ligne modifie la valeur d’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 dynamic, 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 avez besoin de stocker des informations de date / heure sur une ligne et que cette date / heure ne soit pas modifiée, utilisez DateTime; sinon, utilisez l’horodatage.

Remarque: Les champs d’horodatage MS SQL Server ne sont ni des dates ni des heures, ce sont des représentations binarys de la séquence relative du moment où les données ont été modifiées.

Mettre à jour

Comme vous l’avez mis à jour pour dire MySQL:

Les valeurs TIMESTAMP sont converties du fuseau horaire actuel en heure UTC pour le stockage et sont reconverties de l’heure UTC au fuseau horaire actuel pour la récupération. (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 stockée.

Ainsi, si vous utilisez une application sur plusieurs fuseaux horaires et que vous avez besoin de la date et de l’heure pour refléter les parameters individuels des utilisateurs, utilisez Horodatage. Si vous avez besoin de cohérence indépendamment du fuseau horaire, utilisez

Voir Est-ce que je dois utiliser le champ «date / heure» ou «horodatage»? Il a une couverture complète sur le sujet.

EDIT – Juste pour résumer les propriétés de MySQL et mon expérience avec

Horodatage –

a) 4 octets par colonne (contre 8 pour la date / heure)

  • LOWER RANGE (‘1970-01-01 00:00:01’ UTC à ‘2038-01-09 03:14:07’ UTC) QUE DATETIME – Donc, ne l’utilisez pas pour les dates de naissance, etc. effectivement fournir un «horodatage» de «MAINTENANT» pour les activités telles que les mises à jour des lignes, etc., etc.

b) stocké en interne sous forme d’entier

  • En ce qui concerne les performances, mon expérience personnelle a été ambiguë. Parfois, c’est plus rapide … parfois plus lent que DATETIME. Cela prend moins d’espace cependant.

c) a des infos de fuseau horaire!

  • donc – si j’ajoute ‘2011-01-01 3:30’ dans TIMESTAMP (avec le timezone comme EST – Boston) .. plus tard, je change le fuseau horaire du serveur & mysql en PST (Californie) et redémarre le serveur – la valeur changera à ‘2011-01-01 00:00’ – (VEUILLEZ CONFIRMER … je l’avais testé il y a longtemps). Cependant, DATETIME restra le même.

d) Toutes les fonctions DATE () / DAY () / MONTH () fonctionnent à la fois pour TIMESTAMP et DATETIME

e) Dans MySQL, vous pouvez avoir plusieurs TIMESTAMPS par table

  • (OUI, cependant, seul l’un d’entre eux (le premier) sera mis à jour automatiquement avec l’heure de la mise à jour de la ligne, aussi … un seul peut être rendu NOT NULL (pensez au premier))

f) le premier TIMESTAMP dans une table est automatiquement mis à jour …

  • alors faites attention si vous l’utilisez à d’autres fins .. et voulez y autoriser les valeurs nulles. (null stocké sous la forme “0000-00-00 00:00:00” dans DATETIME et TIMESTAMP)

J’ai utilisé plusieurs horodatages à d’autres fins. J’avais besoin de gagner de la place (je devais faire très attention et garder tous ces problèmes en tête).

Mon conseil, optez pour TIMESTAMP à des fins autres que l’horodatage uniquement 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 et 8 datetimes!))

Je n’ai pas eu votre question clairement, mais voir le lien ci-dessous. cela peut vous aider

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

Besoin de spécifier le serveur de firebase database.

Certains moteurs de serveur mettront automatiquement à jour les champs d’horodatage afin de pouvoir les utiliser comme version d’enregistrement dans Optimistic Locking

  • Dans MySQL, sur le type DateTime vous pouvez DATE() les fonctions liées à DATE() , alors que sur l’ timestamp vous ne pouvez pas.
  • Timestamp ne peut pas contenir de valeurs avant le 01-01-1970 .
  • En outre, l’un d’entre eux détient les économies de lumière du jour et les autres ne le font pas (je ne me souviens plus lequel.)

J’ai tendance à toujours choisir DateTime .