首页 > 解决方案 > 无法创建与数据库服务器 MySQL 8.0 的连接

问题描述

这个错误在论坛里已经处理过好几次了,但是我更新到MySQL 8.0后第一次遇到这个错误,之前版本提出的解决方案都不起作用。但是,我发现了两种防止错误的方法:

这样做之后,在我重新启动 PC 之前,该错误将不再发生。启动“计算机管理”(Win10)并查看服务,我在PC启动后看到“MySQL80”状态为“正在运行”。所以这似乎没问题。

我正在使用 MySQL 服务器版本:8.0.12 和 mysql-connector-java 8.0.12。

这是我用来建立连接的java代码。在 8.0 中,我必须添加时区信息才能使其正常工作。看看我还测试了哪些其他标志。

import java.sql.*;
import java.util.*;

public class Test {
  String url= "jdbc:mysql://localhost/myDb?autoReconnect=true&useSSL=false";

  public Test() {
    try {
      Connection conn= DriverManager.getConnection(url+"&serverTimezone=CET",
//  "&useJDBCCompliantTimezoneShift=true"+
//  "&useUnicode=true&characterEncoding=UTF-8"+
//  "&zeroDateTimeBehavior=CONVERT_TO_NULL",
    "root",
    "mypass");
      System.out.println(conn);
    }
    catch(SQLException e) {
      System.out.println(e);
    }
    System.exit(0);
  }


  public static void main(String args[]) {
    EventQueue.invokeLater(Test::new);
  }

}

编辑:刚刚更新到服务器和 J/Connector 8.0.13,但 java.sql.SQLNonTransientConnectionException 仍然存在。

标签: javamysqljdbc

解决方案


在我给定的测试用例中,必须删除“&useSSL=false”。

在 Connector/J 8.0 中,“useSSL”已被“sslMode”取代,“useSSL”确实已被弃用。但对我来说,“弃用”并不意味着“非法”。所以现在我们知道:提防弃用!

至少在我的位置(中欧)指定 serverTimezone 似乎是必须的(运行时错误)。


推荐阅读