Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment stocker au mieux la date/l'heure dans MySql ?

  1. 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 et TIMESTAMP .

    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 le time_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.

  2. 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.

  3. 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 et DATETIME 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  ...