MySQL JDBC Driver 5.1.33-Problema de Zona Horaria


Algunos antecedentes:

Tengo una aplicación web Java 1.6 ejecutándose en Tomcat 7. La base de datos es MySQL 5.5. Anteriormente, estaba usando Mysql JDBC driver 5.1.23 para conectarme a la base de datos. Todo funcionó. Recientemente actualizé al controlador Mysql JDBC 5.1.33. Después de la actualización, Tomcat lanzaría este error al iniciar la aplicación.

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.

¿Por qué sucede esto?

Author: bluecollarcoder, 2014-10-22

11 answers

Aparentemente, para que la versión 5.1.33 del controlador MySQL JDBC funcione con la zona horaria UTC, uno tiene que especificar serverTimezone explícitamente en la cadena de conexión.

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-16 19:25:56

Si está utilizando Maven, puede establecer otra versión del conector MySQL (tuve el mismo error, así que cambié de 6.0.2 a 5.1.39) en pom.xml:

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

Como se informó en otras respuestas, este problema se ha solucionado en las versiones 6.0.3 o superiores, por lo que puede usar la versión actualizada:

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

Maven reconstruirá automáticamente su proyecto después de guardar el archivo 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-16 19:31:17

Este es un error en mysql-connector-java de la versión 5.1.33 a la 5.1.37. Lo he reportado aquí: http://bugs.mysql.com/bug.php?id=79343

Edited: Esto ha sido corregido desde mysql-connector-java 5.1.39

Fue un error tipográfico en la clase TimeUtil en el método loadTimeZoneMappings que genera una localización NPE /com/mysql/jdbc/TimeZoneMapping.archivo de propiedades. Si observa el código, el archivo debe estar ubicado dentro del cargador de clases TimeUtil, no Zona horaria:

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

El parámetro useLegacyDatetimeCode permite corregir la diferencia entre las zonas horarias del cliente y del servidor automáticamente cuando se usan fechas. Por lo tanto, le ayuda a no tener que especificar zonas horarias en cada parte. Aunque usar el parámetro serverTimeZone es una solución alternativa, y mientras tanto se libera el parche, puede intentar corregir mejor el código por sí mismo como lo hice yo.

  • Si se trata de una aplicación independiente, puede intentar simplemente agregar un corregida la clase com/mysql/jdbc/TimeUtil a su código y tenga cuidado con orden de carga de tarro. Esto puede ayudar: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

  • Si se trata de una aplicación web, la solución más fácil es crear la suya propia mysql-connector-java-5.1.37-parcheado.jar, sustituyendo el .clase directamente en el frasco original.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-03 12:36:02

La cadena de conexión debe establecerse de la siguiente manera:

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

Si está definiendo la conexión en un archivo xml (comopersistence.xml, standalone-full.xml, etc..), en lugar de & debe usar &amp; o usar un bloque 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-20 00:53:56

He resuelto este problema configurando 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-25 17:14:22

Resolví poner debajo de la cadena de conexión en la 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-05 22:39:39

Tengo el mismo problema y lo resolví anexar solo"?serverTimezone = UTC " a mi conexión de cadena.

#

Sinossi mi problema:

Java.SQL.SQLException: El valor de zona horaria del servidor 'CEST' no se reconoce o representa más de una zona horaria. Debe configurar el servidor o el controlador JDBC (a través de la propiedad serverTimezone configuration) para usar un valor de zona horaria más específico si desea utilizar la compatibilidad con zonas horarias.

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-18 18:49:03
  1. He añadido en el archivo de configuración de mysql en la sección [mysqld]

    default_time_zone='+03:00'
    
  2. Y reinicie el servidor mysql:

    sudo service mysql restart
    

Donde +03:00 mi zona horaria UTC.

Ruta al archivo de configuración en mi sistema operativo ubuntu 16.04:

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

ADVERTENCIA: SI SU ZONA HORARIA TIENE HORARIO DE VERANO E INVIERNO. DEBE CAMBIAR UTC EN CONFIG SI CAMBIA LA HORA. DOS VECES AL AÑO (POR LO GENERAL) O ESTABLECER CRONTAB CON SUDO.

Mi url de conexión 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-27 14:10:12

Resolví este problema sin ningún cambio de código. solo tienes que ir a la configuración de la hora del sistema y establecer la zona horaria. En mi caso, la zona horaria predeterminada era UTC, que cambié a mi zona horaria local. Después de reiniciar todos los servicios, todo funcionó para mí.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-17 10:32:45

También estaba teniendo exactamente el mismo problema en LibreOffice Base. Así que acabo de especificar una no 'zona horaria de verano' en la cadena de conexión.
** introduzca la descripción de la imagen aquí**

Probé sin el "&serverTimezone=MST" pero eso también falló.

También probé "& serverTimezone = MDT " y eso falló, así que por alguna razón, ¡no le gusta el horario de verano!

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-28 00:42:59

Paquete paquete 1;

Importar java.SQL.Relación; importar java.SQL.DriverManager;

Importar javax.swing.JOptionPane;

Clase pública SQLiteConnection { Conexión 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 21:19:16