Le type de données d'horodatage représente-t-il une valeur instantanée ou une année-mois-date-heure-minute-seconde? Un instant dans le temps est un moment, comme le moment où vous avez commencé à lire ceci, et il peut être décrit avec de nombreuses valeurs de fuseau horaire y-m-d-h-m-s +. Sans fuseau horaire, c'est ambigu, le même moment peut être 17h25 pour moi et 13h25 pour quelqu'un d'autre.
Voici ce que je pense avoir. Le current_timestamp
la fonction renvoie l'heure actuelle dans le fuseau horaire actuel, il s'agit donc d'un instant sans ambiguïté, le vrai maintenant. À l'intérieur d'une table, il est stocké en UTC, donc avec ce fuseau horaire supposé, il devrait également être sans ambiguïté.
Maintenant, voici ce que je ne comprends pas: c'est l'existence du utc_timestamp
une fonction. J'ai stocké un current_timestamp
Et un utc_timestamp
à l'intérieur de la même colonne, et ils étaient différents. Cette fonction ne devrait même pas exister, je ne comprends pas pourquoi elle représente un instant différent dans le temps.
HORODATAGE stocke le nombre de secondes du 1970-01-01 00:00:01 à maintenant. Il se convertit automatiquement au format de date et d'heure lorsque vous récupérez les données.
CURRENT_TIMESTAMP (): Renvoie l'heure actuelle avec votre fuseau horaire configuré. TC_TIMESTAMP (): renvoie la date et l'heure actuelles à l'aide du fuseau horaire UTC.
Si vous utilisez un fuseau horaire qui n'est pas UTC, ces fonctions renvoient toujours des valeurs différentes, égales sinon.
MySQL stocke toujours la date et l'heure en UTC afin de pouvoir les convertir facilement en différents fuseaux horaires. NOW () ou CURRENT_TIMESTAMP () retourne la date/heure plus votre fuseau horaire configuré.
TC_TIMESTAMP () renvoie simplement la date/heure en ignorant votre réglage de fuseau horaire.
Si tu utilises current_timestamp
, MySQL utilisera le fuseau horaire qui est configuré dans my.cnf
. Si aucune valeur n'est définie dans my.cnf
, MySQL déterminera le fuseau horaire de votre système d'exploitation et l'utilisera au démarrage.
Vous pouvez voir comment votre serveur est configuré avec cette requête:
mysql> SELECT @@global.time_zone, @@session.time_zone;
Il est également possible de définir l'horodatage par session.
utc_timestamp
est utilisé pour toujours obtenir l'horodatage en UTC, quel que soit l'horodatage du serveur MySQL configuré.