sql >> Database teknologi >  >> RDS >> Mysql

dato tid rigtigt i app, men forkert i mysql [tidszone]

Hvilke typer kolonner er der i MySQL? Jeg formoder, at det er DATETIME. Denne type gemmer ikke "moment in time", den gemmer "time på uret", så det kan betyde forskellige øjeblikke i forskellige tidszoner.

Når MySQL-driveren skriver java.util.Date til DATETIME-kolonnen, skal den vælge en tidszone for at skrive "time på ur", fordi den samme java.util.Date kan betyde forskellige timer i forskellige tidszoner. Den gemmer time som i MySQL-serverens lokale tidszone.

LocalDateTime har ikke dette problem, fordi det ligner DATETIME. Det repræsenterer time på et ur, ikke tidspunkt i tid, så år/måned/dag-time/minut/sekund er bare gemt i databasen. Meddelelse i dvaleloggen LocalDateTime gives som den er, mens der er tidszone ("CST") ved siden af ​​Dato.

Generelt er det god praksis altid at gemme tid i UTC, så brug DateTime, ikke Date eller LocalDateTime. DateTime med jadira-konverteren gemmer/læser altid DATETIME som UTC.




  1. Sådan hentes data fra overordnet og underordnet tabel på basis af status, hvor fremmednøgle har forskellig status for hver række

  2. Deltag eliminering fungerer ikke i Oracle med underforespørgsler

  3. Sådan konverteres en MySQL-database til UTF-8-kodning

  4. SQL - betyder rækkefølgen af ​​ELLER-betingelser noget?