Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

data hora certa no aplicativo, mas errada no mysql [fuso horário]


Quais são os tipos de colunas no MySQL? Suspeito que seja DATETIME. Este tipo não armazena "momento no tempo", ele armazena "hora no relógio", então pode significar momento diferente em fusos horários diferentes.

Quando o driver MySQL escreve java.util.Date na coluna DATETIME, ele tem que escolher algum fuso horário para escrever "hora no relógio", porque o mesmo java.util.Date pode significar hora diferente em fusos horários diferentes. Ele armazena a hora como no fuso horário local do servidor MySQL.

LocalDateTime não tem esse problema, pois é como DATETIME. Representa a hora em um relógio, não o momento no tempo, portanto, ano/mês/dia-hora/minuto/segundo são armazenados apenas no banco de dados. O aviso no log de hibernação LocalDateTime é fornecido como está, enquanto há o fuso horário ("CST") ao lado de Date.

Geralmente, é uma boa prática armazenar a hora sempre em UTC, portanto, use DateTime, não Date nem LocalDateTime. DateTime com conversor jadira sempre armazena/lê DATETIME como UTC.