Получение неверного значения для столбца метки времени на сервере MySQL 8 с использованием драйвера mysql -connector- java jdb c 8.0.18 - PullRequest
3 голосов
/ 19 февраля 2020

Мы перенесли наше приложение с MySQL 5.1.6 на MySQL 8.0.16

При извлечении столбца метки времени с сервера MySQL 8 с использованием mysql -connector- java jdb * Драйвер 1041 * (версия 8.0.18, 8.0.19), мы получаем неправильное значение для значения даты, которое находится в летнее время (DST).

На нашем сервере размещено java приложение & MySQL база данных находится в EST.

Здесь у нас есть столбец created_date, имеющий тип datetime. Он имеет значение '2020-03-17 23:01:54' для указанной строки c. При извлечении тех же данных через JDB C как:

Timestamp timestamp = resultSet.getTimestamp("created_date"); 

мы получаем значение как 2020-03-18 00: 01: 54.0, т.е. применяется DST.

Существует известная ошибка в MySQL: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-known-issues-limitations.html

Предлагается использовать дополнительный параметр в jdb c url serverTimezone = UT C. Но мы не можем использовать UT C, потому что мы хотим использовать спецификацию развертывания c timezone в нашем приложении / базе данных.

Примечание. Мы не сталкивались с этой проблемой при MySQL 5.1.

Дополнительное обновление: при вставке данных в базу данных, если я использую jdb c url с параметром serverTimezone = UT C, то при получении столбца метки времени получаю правильное значение.

Похоже, что с serverTimezone = UT C, драйвер JDB C не применяет DST при сохранении отметки времени в базе данных. Поэтому предложенный обходной путь (т. Е. ServerTimezone = UT C), похоже, работает.

Но если я вставляю данные с помощью команды «Загрузить данные локального файла», используя JDB C url, содержащий serverTimezone = UT C, т. Е.

PreparedStatement stmt = connection.prepareStatement("LOAD DATA LOCAL INFILE.....")

, кажется, флаг serverTimezone = UT C игнорируется, и данные сохраняются со значением метки времени, примененным DST. Таким образом, при получении метки времени мы получаем неправильное значение.

Оцените любые предложения.

...