-
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 :
DATETIMEetTIMESTAMP.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 :
-
TIMESTAMPutilise letime_zonede 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 ; -
DATETIMEstocke 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,
TIMESTAMPa 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
TIMESTAMPetDATETIMEtypes 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 ...