Проблема с сохранением переменной Time в базе данных - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь сохранить "02:22:22", например, в моей базе данных MySQL. Насколько я могу судить в своем коде, все работает правильно, но когда значение сохраняется в MySQL, оно меняется на один час. Так что всегда: «03:22:22». Когда я получаю значение, оно возвращается к норме: «02:22:22». Как я могу это исправить и почему это происходит?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

LocalTime и JDB C 4.2

Возможно, вы видите корректировку часового пояса, вводимую в обмен данными. Вы можете избежать такой проблемы, используя JDB C с типами java .time .

Другие ответы и комментарии, предлагающие вам поиграть с часовыми поясами по умолчанию, на мой взгляд, ошибочны - лучше указать в коде Java часовые пояса явно, чем неявно полагаться на значения по умолчанию.

JDB C 4.2 добавлена ​​необходимая поддержка для обмена некоторыми типами java .time . Сюда входит класс java.time.LocalTime для представления времени суток без даты и без часового пояса.

Table of date-time types in Java (both legacy and modern) and in standard SQL

LocalTime lt = LocalTime.parse( "02:22:22" ) ;
myPreparedStatement.setObject( … , lt ) ;

Извлечение.

LocalTime lt = myResultSet.getObject( … , LocalTime.class ) ;

Обратите внимание, что нигде в этом коде мы не использовали строки при взаимодействии с базой данных. Если вы используете этот код со столбцом в своей базе данных типа TIME, тогда у вас не будет проблем с часовыми поясами.

Я не использую Hibernate или JPA, поэтому я не могу говорить об этом, кроме как сказать что я знаю, что и JPA 2.2, и Hibernate добавили поддержку типов java .time . Обсуждается здесь , здесь и в других местах .

2 голосов
/ 27 мая 2020

исправил это, добавив & serverTimezone = Europe / Sofia в URL-адрес базы данных в свойствах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...