有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Mysql和IntelliJ IDEA java项目进行数据库连接时出现问题

我使用intelliJ和MySQL用java构建了一个应用程序。我犯了如下错误

“服务器时区值“××åìåñÞþñáGTB”无法识别或表示多个时区。如果要利用时区支持,必须配置服务器或JDBC驱动程序(通过serverTimezone配置属性)以使用更具体的时区值。”

我尝试使用jdbc:mysql://localhost:3306/schooldb?useLegacyDatetimeCode=false&serverTimezone=UTC而不是jdbc:mysql://localhost:3306/schooldb但问题依然存在

我使用mysql-connector-java-8.0.15

我的代码是

public class Database {
    private MysqlDataSource dataSource;
    private Connection con;


    public Database(){
        dataSource = new MysqlDataSource();
        dataSource.setServerName("localhost");
        dataSource.setDatabaseName("schooldb");

        try{
            con = dataSource.getConnection("tei", "cangetin");
        }catch(SQLException e){
            e.printStackTrace();
        }
    }

    protected void finalize() throws Throwable{
        super.finalize();
        con.close();
    }
}

Database db = new Database();

有人能帮我吗


共 (1) 个答案

  1. # 1 楼答案

    你可以像下面的代码一样使用MysqlDataSource.setServerTimezone。通过将系统区域设置(在Windows上)设置为与英语不同的内容(并重新启动MySQL),我用mysql-connector-java:8.0.18重现了异常,编辑解决了连接问题

    public Database() throws SQLException {
      dataSource = new MysqlDataSource();
      dataSource.setServerName("localhost");
      dataSource.setDatabaseName("schooldb");
      dataSource.setServerTimezone("UTC");
      try {
        con = dataSource.getConnection("username","pass");
        CallableStatement call = con.prepareCall("show databases;");
    
        ResultSet res = call.executeQuery();
        while(res.next()) {
          System.out.println(res.getString(1));
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
    

    奇怪的时区来自MySQL服务器配置。如果执行SQL:

    SHOW VARIABLES LIKE '%zone%';
    

    然后你会发现变量system_time_zone有一个奇怪的值。最终,您可以编辑my.ini文件中的设置:

    [mysqld]
    ...
    default-time-zone='+00:00'