-
En règle générale, vous ne devez faire ni l'un ni l'autre :les types de données de la couche de base de données doivent être significatifs (autant que possible) par eux-mêmes et ne pas dépendre de votre application pour les interpréter. Comme le dit @Jim DeLaHunt , cela permet à la base de données de les manipuler/interpréter facilement à partir de SQL selon les besoins (et vous permet également d'accéder facilement aux mêmes données à partir d'une autre base de code d'application à l'avenir).
MySQL a cinq types temporels , dont seulement deux stockent à la fois une date et une heure :
DATETIME
etTIMESTAMP
.Comme d'autres l'ont fait allusion, la différence se résume à savoir si vous souhaitez stocker le fuseau horaire - bien que je trouve que c'est une façon assez déroutante de le voir :
-
TIMESTAMP
utilise letime_zone
de la session variable pour convertir l'entrée en un horodatage UTC, puis à nouveau pour la sortie :c'est utile pour spécifier un moment exact dans le temps ; -
DATETIME
stocke simplement la date et l'heure sans tenir compte du fuseau horaire, un peu comme prendre une photo d'un calendrier et d'une horloge :c'est utile pour spécifier un événement qui se produit globalement à la même heure locale.
-
-
Tout comme vous déclareriez n'importe quelle autre colonne, vous spécifiez le type de données pertinent après le nom de la colonne.
Attention,
TIMESTAMP
a des fonctionnalités supplémentaires, telles que la la mise à jour automatique , que vous pouvez désactiver dans votre déclaration de colonne si vous le souhaitez. -
En utilisant l'un des types temporels ci-dessus, vous pourrez faire tout cela (en utilisant fonctions de date comme demandé). La sortie par défaut de
TIMESTAMP
etDATETIME
types est une chaîne dans'YYYY-MM-DD HH:MM:SS'
formater.En particulier, le "temps écoulé" de la comparaison de deux valeurs pourrait par exemple être obtenu avec MySQL
TIMEDIFF()
fonction :SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...