com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property
时间: 2025-04-01 21:26:55 浏览: 44
### 解决方案
`com.mysql.cj.exceptions.InvalidConnectionAttributeException` 是由 MySQL 驱动程序无法识别服务器返回的时区值引起的。可以通过在 JDBC 连接 URL 中显式指定 `serverTimezone` 参数来解决此问题。
以下是详细的解决方案:
#### 方法一:配置 JDBC 连接字符串中的 `serverTimezone`
在连接数据库时,修改 JDBC URL 并添加 `serverTimezone` 属性。例如,如果希望使用 UTC 作为时区,则可以将连接字符串设置如下[^3]:
```plaintext
jdbc:mysql://<host>:<port>/<database>?serverTimezone=UTC
```
对于中国标准时间(CST),可以将其更改为 Asia/Shanghai:
```plaintext
jdbc:mysql://<host>:<port>/<database>?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
```
#### 方法二:全局配置 MySQL 服务器时区
另一种方法是在 MySQL 数据库服务器上永久更改默认时区。编辑 MySQL 的配置文件(通常是 `my.cnf` 或 `my.ini`),并添加以下内容到 `[mysqld]` 节点下[^4]:
```ini
[mysqld]
default-time-zone='+08:00'
```
保存后重启 MySQL 服务以使更改生效。这会强制所有客户端连接都使用该时区。
#### 方法三:Spring Boot 应用程序中配置数据源
如果是基于 Spring Boot 的项目,在 `application.properties` 文件中可以直接定义完整的 JDBC URL 和其他参数[^5]:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/yourDatabase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=password
```
以上方式能够有效避免因未匹配的时区而导致的异常。
---
### 示例代码
假设我们正在开发一个 Java Web 应用程序,并希望通过编程方式建立数据库连接。下面是一个简单的示例代码片段展示如何正确配置 `serverTimezone` 参数:
```java
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnector {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("Connected successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
上述代码展示了如何通过 JDBC API 建立带有时区支持的安全连接。
---
阅读全文
相关推荐

















