MySQL JDBC Driver 5.1.33-problem ze strefą czasową

Jakieś tło:

Mam Java 1.6 webapp działa na Tomcat 7. Bazą danych jest MySQL 5.5. Wcześniej używałem Mysql JDBC driver 5.1.23 do łączenia się z DB. Wszystko działało. Niedawno zaktualizowałem do Mysql JDBC driver 5.1.33. Po aktualizacji Tomcat wyrzuci ten błąd podczas uruchamiania aplikacji.

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.
Dlaczego tak się dzieje?
Author: bluecollarcoder, 2014-10-22

11 answers

Najwyraźniej, aby Wersja 5.1.33 Sterownika MySQL JDBC działała ze strefą czasową UTC, należy jawnie określić serverTimezone w ciągu połączenia.

jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 239
Author: bluecollarcoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-16 19:25:56

Jeśli używasz Mavena, możesz po prostu ustawić inną wersję MySQL connector (miałem ten sam błąd, więc zmieniłem z 6.0.2 na 5.1.39) w pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

Jak opisano w innych odpowiedziach, ten problem został rozwiązany w wersji 6.0.3 lub wyższej, więc możesz użyć zaktualizowanej wersji:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.3</version>
</dependency>

Maven automatycznie zbuduje Twój projekt po zapisaniu pliku pom.xml.

 43
Author: Gabriel Amazonas Mesquita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-16 19:31:17

Jest to błąd w mysql-connector-java od wersji 5.1.33 do 5.1.37. Zgłosiłem to tutaj: http://bugs.mysql.com/bug.php?id=79343

Edytowane: To zostało poprawione z mysql-connector-java 5.1.39

To była literówka w klasie TimeUtil w metodzie loadTimeZoneMappings, która podnosi NPE lokalizujące / com / mysql / JDBC / TimeZoneMapping.Plik Właściwości. Jeśli spojrzysz na kod, plik powinien znajdować się w loaderze klasy TimeUtil, a nie Strefa czasowa:

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

Parametr useLegacyDatetimeCode pozwala automatycznie skorygować różnicę między strefami czasowymi klienta i Serwera Podczas korzystania z dat. Pomaga to precyzyjnie nie określać stref czasowych w każdej części. Chociaż używanie parametru serverTimeZone jest obejściem, a tymczasem łatka jest wydana, możesz spróbować lepiej poprawić kod samodzielnie, tak jak ja.

  • Jeśli jest to samodzielna aplikacja, możesz spróbować po prostu dodać a poprawiłem klasę com / mysql / jdbc / TimeUtil do kodu i uważajcie z ładowaniem jar zamówienia. To może pomóc: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

  • Jeśli jest to aplikacja internetowa, łatwiejszym rozwiązaniem jest stworzenie własnej mysql-connector-java-5.1.37-patched.słoik, zastępujący ... Klasa bezpośrednio do oryginalnego słoika.

 23
Author: antgar9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-03 12:36:02

Łańcuch połączeń powinien być ustawiony w następujący sposób:

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

Jeśli definiujesz połączenie w pliku xml (np.persistence.xml, standalone-full.xml, itd..), zamiast & należy użyć &amp; lub użyć bloku CDATA.

 22
Author: Alireza Alallah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 00:53:56

Rozwiązałem ten problem konfigurując MySQL.

SET GLOBAL time_zone = '+3:00';

 20
Author: Dmitriy Rud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 17:14:22

Rozwiązałem umieszczanie poniżej łańcucha połączeń w adresie URL

jdbc:mysql://localhost:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 8
Author: Rafael Costa Cavalcante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 22:39:39

Mam ten sam problem i rozwiązałem go tylko "?serverTimezone = UTC " to my string connection.

#

Sinossi mój problem:

Java.sql.SQLException: wartość strefy czasowej serwera "CEST" jest nierozpoznana lub reprezentuje więcej niż jedną strefę czasową. Musisz skonfigurować sterownik serwera lub JDBC (za pomocą właściwości konfiguracyjnej servertimezone), aby używał bardziej określonej wartości strefy czasowej, jeśli chcesz korzystać ze wsparcia strefy czasowej.

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 
 4
Author: felice de simone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-18 18:49:03
  1. Dodałem w pliku konfiguracyjnym mysql w sekcji [mysqld]

    default_time_zone='+03:00'
    
  2. I restart serwera mysql:

    sudo service mysql restart
    

Gdzie +03:00 Moja strefa czasowa UTC.

Ścieżka do pliku konfiguracyjnego mojego systemu operacyjnego ubuntu 16.04:

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

OSTRZEŻENIE: JEŚLI TWOJA STREFA CZASOWA MA CZAS LETNI I ZIMOWY. MUSISZ ZMIENIĆ UTC W CONFIG, JEŚLI ZMIANA CZASU. DWA RAZY W ROKU (ZWYKLE) LUB USTAWIĆ CRONTAB Z SUDO.

mój adres URL połączenia jdbc:

"jdbc:mysql://localhost/java"
 2
Author: Fortran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 14:10:12

Rozwiązałem ten problem bez żadnej zmiany kodu. wystarczy ustawić czas systemu i ustawić strefę czasową. W moim przypadku domyślną strefą czasową była UTC, którą zmieniłem na moją lokalną strefę czasową. Po ponownym uruchomieniu wszystkich usług, wszystko działało dla mnie.

 1
Author: Nikunj Shroff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 10:32:45

Miałem dokładnie ten sam problem w bazie LibreOffice. Więc właśnie określiłem w łańcuchu połączeń strefę czasową inną niż "daylight savings time zone".
** wpisz tutaj opis obrazu**

Próbowałem Bez "&serverTimezone=MST", ale to również nie powiodło się.

Próbowałem również "& serverTimezone = MDT " i to się nie udało, więc z jakiegoś powodu nie podoba mi się czas letni!

 0
Author: GordR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 00:42:59

Pakiet pack1;

Import Javy.sql.Połączenie; Importuj Javę.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';
    }
}

}

 -2
Author: user10116230,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 21:19:16