web-dev-qa-db-fra.com

Problème avec le fuseau horaire avec hibernate et MySQL

J'essaie de configurer la mise en veille prolongée (5.3.3 final) avec Tomcat (8.5) et mysql (v.8.0.12). Lorsque je lance mon HibernateTest.Java (code très simple du tutoriel, pas de problème ici) avec le hibernate.connection.url défini comme ‘jdbc: mysql: // localhost: 3306/sakila’ je rencontre l’erreur suivante:

Caused by: Java.sql.SQLException: The server time zone value 'Paris, Madrid 
(heure d?été)' is unrecognized or represents more than one time zone. You 
must configure either the server or JDBC driver (via the serverTimezone 
configuration property) to use a more specifc time zone value if you want to 
utilize time zone support.

MySQL est actuellement défini sur le fuseau horaire "SYSTEM" pour le global et la session (mysql> select @@ global.time_zone, @@ session.time_zone). Et mon fuseau horaire système est en effet Paris/Madrid. Dans mon fichier hibernate.cfg.xml, lorsque j'écris l'url de connexion:

jdbc:mysql://localhost:3306/sakila?useJDBCCompliantTimezoneShift=true;useLegacyDatetimeCode=false;serverTimezone=UTC;

L'erreur est:

com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near '=false;serverTimezone=UTC;'.

Ce n'est pas le problème mentionné dans le post stackoverflox "Problèmes avec le fuseau horaire du serveur mysql et la connexion jdbc", car le "&" est refusé par Eclipse, voir capture d'écran ci-jointe du fichier hibernate.cfg.xml:

La référence à l'entité "useLegacyDatetimeCode" doit se terminer par le délimiteur ';'

Ce n'est pas un caractère invisible entre 'mysql:' et '// localhost' comme mentionné dans le post stackoverflow "URL de base de données mal formée, n'a pas réussi à analyser les sections URL principales". J'ai essayé de contourner le problème en définissant via MySql Workbench l'option pour l'heure locale (fuseau horaire par défaut = '+02: 00') qui correspond à l'heure d'été pour Madrid/Paris (mon cas ici). Cela ne change rien. Une idée? Dois-je le configurer ailleurs? Merci pour votre aide, je suis sur celui-ci depuis 3 jours sans succès.

6
Codizon

J'ai finalement trouvé une solution. Comme il semblait que ni ';' ni '&' ne ferait l'affaire pour ajouter plus d'un paramètre, j'ai supprimé tous les paramètres et essayé un seul paramètre:

jdbc:mysql://localhost:3306/sakila?serverTimezone=UTC

Et ça a fait l'affaire, je n'ai plus de problème avec ça.

4
Codizon

Vous devez échapper au &:

jdbc:mysql://localhost:3306/sakila?useSSL=false&serverTimezone=UTC

Voir plus ici: https://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-db-configuration-hibernate.html

10
user10408448_vova

L'URL suivante a généré l'erreur: jdbc: mysql: // localhost: 3306/db? UseLegacyDatetimeCode = false & serverTimezone = CET

Cela a fonctionné pour moi: remplacer "&" par "&".

0
Maarten