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?
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
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
.
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.
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 &
o usar un bloque CDATA
.
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';
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
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
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
-
He añadido en el archivo de configuración de mysql en la sección [mysqld]
default_time_zone='+03:00'
-
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"
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í.
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.
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!
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';
}
}
}
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