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

data e ora corretta nell'app ma sbagliata in mysql [fuso orario]

Quali sono i tipi di colonne in MySQL? Sospetto che sia DATETIME. Questo tipo non memorizza "momento nel tempo", memorizza "ora sull'orologio", quindi può significare momento diverso in diversi fusi orari.

Quando il driver MySQL scrive java.util.Date nella colonna DATETIME, deve scegliere un fuso orario per scrivere "hour on clock", perché lo stesso java.util.Date può significare un'ora diversa in diversi fusi orari. Memorizza l'ora come nel fuso orario locale del server MySQL.

LocalDateTime non ha questo problema, perché è come DATETIME. Rappresenta l'ora su un orologio, non il momento, quindi anno/mese/giorno-ora/minuto/secondo sono semplicemente archiviati nel database. L'avviso nel registro di ibernazione LocalDateTime viene fornito così com'è, mentre è presente il fuso orario ("CST") accanto a Date.

In genere, è buona norma archiviare l'ora sempre in formato UTC, quindi utilizzare DateTime, non Date né LocalDateTime. DateTime con il convertitore jadira memorizza/legge sempre DATETIME come UTC.