Драйвер JDBC MySQL 5.1.33 – Проблема с часовым поясом

Некоторые предпосылки:

У меня есть Java 1.6 webapp, работающий на Tomcat 7. База данных – это MySQL 5.5. Раньше я использовал драйвер Mysql JDBC 5.1.23 для подключения к БД. Все сработало. Недавно я обновился до драйвера Mysql JDBC 5.1.33. После обновления Tomcat выбросит эту ошибку при запуске приложения.

WARNING: Unexpected exception resolving reference java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents more than one timezone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc timezone value if you want to utilize timezone support. 

Почему это происходит?

По-видимому, чтобы получить версию 5.1.33 драйвера JDBC MySQL для работы с часовым поясом UTC, serverTimezone явно указать serverTimezone в строке подключения.

 jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 

Если вы используете Maven, вы можете просто установить другую версию соединителя MySQL (у меня была такая же ошибка, поэтому я изменился с 6.0.2 по 5.1.39) в pom.xml :

  mysql mysql-connector-java 5.1.39  

Как сообщалось в других ответах, эта проблема была исправлена ​​в версиях 6.0.3 или выше, поэтому вы можете использовать обновленную версию:

  mysql mysql-connector-java 6.0.3  

Maven автоматически восстановит ваш проект после сохранения файла pom.xml .

Строка подключения должна быть установлена ​​следующим образом:

 jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 

Если вы определяете соединение в xml файле (например, persistence.xml , standalone-full.xml и т. Д.), Вместо & вы должны использовать & или использовать блок CDATA .

Это ошибка в mysql-connector-java от версии 5.1.33 до 5.1.37. Я сообщил об этом здесь: http://bugs.mysql.com/bug.php?id=79343

Отредактировано: Это исправлено из mysql-connector-java 5.1.39

Это была опечатка в classе TimeUtil в методе loadTimeZoneMappings, которая вызывает поиск NPE файла /com/mysql/jdbc/TimeZoneMapping.properties. Если вы посмотрите на код, файл должен быть расположен в загрузчике classов TimeUtil, а не TimeZone:

 TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE); 

Параметр useLegacyDatetimeCode позволяет автоматически корректировать разницу между часовыми поясами клиента и сервера при использовании дат. Таким образом, это помогает вам точно не указывать часовые пояса в каждой части. Хотя использование параметра serverTimeZone является обходным решением , а между тем патч выпущен, вы можете попробовать лучше исправить код самостоятельно, как и я.

  • Если это автономное приложение, попробуйте просто добавить исправленный class com / mysql / jdbc / TimeUtil в свой код и будьте осторожны с порядком загрузки jar. Это может помочь: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

  • Если это веб-приложение, проще всего создать свой собственный mysql-connector-java-5.1.37-patched.jar, заменив .class прямо в исходную банку.

Я решил эту проблему, настроив MySQL.

SET GLOBAL time_zone = '+3:00';

Я решил поставить ниже строку подключения в URL-адрес

 jdbc:mysql://localhost:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 
  1. Я добавил в конфигурационный файл mysql в разделе [mysqld]

     default_time_zone='+03:00' 
  2. И перезапустите сервер mysql:

     sudo service mysql restart 

Где +03: 00 мой часовой пояс UTC.

Путь к файлу конфигурации на моем os ubuntu 16.04:

 /etc/mysql/mysql.conf.d/mysqld.cnf 

ПРЕДУПРЕЖДЕНИЕ: ЕСЛИ ВАША ВРЕМЕННАЯ ЗОНА ИМЕЕТ ЛЕТО И ЗИМНЕЕ ВРЕМЯ. ВЫ ДОЛЖНЫ ИЗМЕНИТЬ UTC В КОНФИГУКЕ, ЧТО ВРЕМЯ ИЗМЕНЕНИЯ. ДВАЖДЫ В ГОД (ПОСЛЕДУЮЩАЯ) ИЛИ УСТАНОВЛЕНА КРОНТАБА С СУДО.

Соединение с моим url jdbc:

 "jdbc:mysql://localhost/java" 

Я решил эту проблему без какого-либо изменения кода. просто установите время системы и установите часовой пояс. В моем случае часовой пояс по умолчанию был UTC, который я изменил на свой местный часовой пояс. После того, как я перезапустил все службы, все сработало для меня.

У меня такая же проблема, и я решил, что добавляет только «? ServerTimezone = UTC» в мое строковое соединение.

#

синошь моя проблема:

java.sql.SQLException: значение часового пояса сервера «CEST» непризнано или представляет собой более одного часового пояса. Вы должны настроить драйвер сервера или JDBC (через свойство конфигурации serverTimezone), чтобы использовать более определенное значение часового пояса, если вы хотите использовать поддержку часового пояса.

 my dbDriver = com.mysql.jdbc.Driver my jar = mysql-connector-java-8.0.12.jar my java = 1.8 my tomcat = Apache Tomcat Version 8.5.32 my MySql server = MySql ver.8.0.12 

У меня также была такая же проблема в LibreOffice Base. Поэтому я просто указал в строке подключения не «летнее время».
** введите описание изображения здесь **

Я пробовал без «& serverTimezone = MST», но это тоже не удалось.

Я также попытался «& serverTimezone = MDT», и это не удалось, поэтому по какой-то причине ему не нравится переход на летнее время!

пакет pack1;

import java.sql.Connection; import java.sql.DriverManager;

import javax.swing.JOptionPane;

public class sqliteConnection {Connection conn = null;

 public static Connection dbConnector() { try {Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306","root",""); JOptionPane.showMessageDialog(null, "connection is succesful"); return conn; }catch(Exception e) { JOptionPane.showMessageDialog(null, e); return null; ////you need also to execute this in database ===> SET GLOBAL time_zone = '+3:00'; } } 

}

  • Как перевести между часовыми поясами Windows и IANA?
  • Мне нужен список сопоставлений городов для timezones - лучший способ получить его?
  • Сопоставление почтового индекса США с часовым поясом
  • Как получить текущий часовой пояс MySQL?
  • .NET DateTime.Now возвращает неправильное время, когда изменяется часовой пояс
  • Преобразование временной зоны
  • Изменение часового пояса MySQL?
  • Как конвертировать дату с одного часового пояса в другой часовой пояс
  • Управление календарем, датой и временем java для приложения с несколькими часовыми поясами
  • Как установить часовой пояс по умолчанию в node.js?
  • Как элегантно работать с часовыми поясами
  • Давайте будем гением компьютера.