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

date et heure correctes dans l'application mais incorrectes dans mysql [fuseau horaire]

Quels sont les types de colonnes dans MySQL ? Je suppose que c'est DATETIME. Ce type ne stocke pas "le moment dans le temps", il stocke "l'heure sur l'horloge", donc peut signifier un moment différent dans différents fuseaux horaires.

Lorsque le pilote MySQL écrit java.util.Date dans la colonne DATETIME, il doit choisir un fuseau horaire pour écrire "heure d'horloge", car le même java.util.Date peut signifier une heure différente dans différents fuseaux horaires. Il stocke l'heure comme dans le fuseau horaire local du serveur MySQL.

LocalDateTime n'a pas ce problème, car il est comme DATETIME. Il représente l'heure sur une horloge, pas le moment dans le temps, ainsi l'année/mois/jour-heure/minute/seconde sont simplement stockés dans la base de données. L'avis dans le journal d'hibernation LocalDateTime est donné tel quel, alors qu'il y a un fuseau horaire ("CST") à côté de Date.

Généralement, il est recommandé de toujours stocker l'heure en UTC, utilisez donc DateTime, et non Date ni LocalDateTime. DateTime avec le convertisseur jadira stocke/lit toujours DATETIME en UTC.