zona unrecognized the sudaméric pacífico horaria hora est error descargar configurar java mysql tomcat jdbc timezone

unrecognized - mysql connector java 5.1 6 bin jar



MySQL JDBC Driver 5.1.33-Problema de zona horaria (7)

Algunos antecedentes:

Tengo una webapp Java 1.6 ejecutándose en Tomcat 7. La base de datos es MySQL 5.5. Anteriormente, estaba usando el controlador Mysql JDBC 5.1.23 para conectarme a la base de datos. Todo funcionó. Recientemente me actualicé 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é está pasando esto?


  1. Añadí 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 os ubuntu 16.04:

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

ADVERTENCIA: SI SU HUSO HORIZONTAL TIENE TIEMPO DE VERANO E INVIERNO. DEBE CAMBIAR UTC EN LA CONFIGURACIÓN SI CAMBIA EL TIEMPO. DOS VECES AL AÑO (EN GENERAL) O FIJE CRONTAB CON SUDO.

Mi conexión url jdbc:

"jdbc:mysql://localhost/java"


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

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


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

Editado: Esto ha sido corregido de mysql-connector-java 5.1.39

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

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

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

  • Si se trata de una aplicación independiente, puede simplemente intentar agregar una clase corregida com / mysql / jdbc / TimeUtil a su código y tenga cuidado con el orden de carga de jar. 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 su propio mysql-connector-java-5.1.37-patched.jar, sustituyendo el .class directamente en el jar original.


He resuelto este problema configurando MySQL.

SET GLOBAL time_zone = ''+3:00'';


La cadena de conexión debe establecerse de esta manera:

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

Si está definiendo la conexión en un archivo xml (como persistence.xml , standalone-full.xml , etc.), en lugar de & debe usar & o usa un bloque CDATA .


Resolví este problema sin ningún cambio de código único. simplemente pase a la configuración del tiempo del sistema y configure 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í.


Si está utilizando Maven, puede simplemente configurar 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 posteriores, 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 volverá a generar automáticamente su proyecto después de guardar el archivo pom.xml .