java - 无法创建与数据库服务器 MySQL 8.0 的连接
问题描述
这个错误在论坛里已经处理过好几次了,但是我更新到MySQL 8.0后第一次遇到这个错误,之前版本提出的解决方案都不起作用。但是,我发现了两种防止错误的方法:
- 从控制台窗口运行 MySQL 并退出。
- 启动工作台并单击“本地实例 MySQL57”(更新后该名称未更改。)再次关闭工作台。
这样做之后,在我重新启动 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 仍然存在。
解决方案
在我给定的测试用例中,必须删除“&useSSL=false”。
在 Connector/J 8.0 中,“useSSL”已被“sslMode”取代,“useSSL”确实已被弃用。但对我来说,“弃用”并不意味着“非法”。所以现在我们知道:提防弃用!
至少在我的位置(中欧)指定 serverTimezone 似乎是必须的(运行时错误)。