Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro no timezone

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Hora oficial do Brasil' 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
    at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:128)
    at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2236)
    at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2260)
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1314)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:963)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:822)
    ... 33 more
`

Já alterei a string para

<property name="javax.persistence.jdbc.url" 
                value="jdbc:mysql://localhost/financas?useTimezone=true&serverTimezone=UTC" />

porém mesmo assim não compila fica com erro de delimitador ';'

6 respostas

Oi Carlos Eduardo!

Mas o código Java não está compilando?

Caso esteja dando erro só na hora de executar, manda aqui toda a stacktrace que tá gerando mesmo você usando as propriedades de time zone?

Abraço!

O código compila mais gera esse erro na hora de criar a tabela no banco. Tentei colocar a propriedade useTimezone=true&serverTimezone=UTC da erro informando que a linha espera um delimitador ';'

solução!

Carlos,

Você está usando qual sistema operacional? No Linux não tive problema.

Tive esse problema com o MySQL no Windows.

Me parece que o MySQL, quando não tem um timezone default, tenta pegar o timezone do Windows, mas esse timezone está num formato que ele não reconhece.

Resolvi da seguinte forma:

Ajustar o time zone no MySQL do Windows: Parar o servidor do MySQL

  • Editar o arquivo my.ini ( C:\ProgramData\MySQL\MySQL Server 8.0\my.ini )
  • Inserir a linha: default-time-zone = +3:00 Reiniciar o servidor MySQL

Se você tiver o banco de dados de nomes de zonas de fusos horários configurado, pode se referir às zonas pelos seus nomes, mas creio que isso é dispensável para o caso.

Mais informações em:

https://pt.stackoverflow.com/questions/151716/fuso-hor%C3%A1rio-brasileiro-no-mysql

https://elias.praciano.com/2015/07/como-ajustar-o-fuso-horario-ou-timezone-no-mysql/

Opa Carlos, eu já tive esse problema e achei que ele ocorria no Linux. Mas realmente não estou usando os parâmetros e vi que está funcionando normal aqui.

Se for Windows, tenta fazer o que o Afonso falou no comentário acima?

Qualquer dúvida no processo é só avisar aqui.

Caso nao seja Windows, confirma pra gente seu sistema operacional e versão, assim como a versão do MySQL, e do driver do MySQL. Assim tento reproduzir.

Abraço

Para resolver coloquei no persistence essa configuração, pois estou utilizando o MYSQL8..

    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/financas?useTimezone=true&amp;serverTimezone=UTC"/>

Obrigado Afonso Ademir Adão consegui resolver conforme sua dica.

https://elias.praciano.com/2015/07/como-ajustar-o-fuso-horario-ou-timezone-no-mysql/

Ajustando o timezone do mysql.

Muito obrigado.