Справочник по C#

    Исходники по языку программирования CSharp

    java.sql.SQLException: значение часового пояса сервера 'xx time' не распознано

    /
    /
    /
    49 Views

    Создание JDBC-соединения с сервером MySQL с последними mysql-connector-java:8.0.16 и попадает в следующее SQLException:

    Протестировано с

    • MySQL 5.7
    • Java 8
    • Драйвер JDBC, mysql-connector-java 8.0.16
    
    try (Connection conn = DriverManager.getConnection(
    "jdbc:mysql://127.0.0.1:3306/test "," root "," password ")) {
    
    // ...
    
    } catch (Exception e) {
    e.printStackTrace();
    }
    

    Выход

    
    java.sql.SQLException: The server time zone value 'Malay Peninsula Standard Time' 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 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
    at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at com.csharpcoderr.jdbc.JDBCExample.main(JDBCExample.java:23)
    Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Malay Peninsula Standard Time' 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 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    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:132)
    at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2243)
    at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2267)
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    ... 6 more
    

    1. Решение

    1.1 Найдите файл конфигурации MySQL, например, my.ini или же my.cnf , Добавьте часовой пояс по умолчанию в конце файла:

    my.ini

    
    # Indicates the InnoDB Cluster Port.
    # innodbclusterport=3306
    
    # Load mysql plugins at start."plugin_x ; plugin_y".
    # plugin_load
    
    # MySQL server's plugin configuration.
    # loose_mysqlx_port=33060
    
    # Set default time zone
    default-time-zone = '+08:00'
    

    1.2 Перезапустите службу MySQL.

    PS Прочтите эти файлы опций MySQL, чтобы узнать, где находится файл ( my.ini или же my.cnf ) расположен.

    2. Решение

    В качестве альтернативы, передайте serverTimezone свойство в строке подключения JDBC напрямую.

    
    try (Connection conn = DriverManager.getConnection(
    "jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC "," root "," password ")) {
    
    // ...
    
    } catch (Exception e) {
    e.printStackTrace();
    }
    

    Рекомендации

    Java JDBC MySQL

    java.sql.SQLException: значение часового пояса сервера 'xx time' не распознано

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest