JDBC——解决MySQL8.0时区的问题
Posted 瓦特的代码小屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC——解决MySQL8.0时区的问题相关的知识,希望对你有一定的参考价值。
软件版本
- Windows:Windows10
- mysql:mysql-8.0.19
问题描述
java将当前时间保存到MySQL数据库时,MySQL中的时间不正确
SRC源代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBCDemo
public static void main(String[] args) throws Exception
//1、注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2、获取连接
String url="jdbc:mysql://127.0.0.1:3306/db4";
String username="root";//自己的用户名
String password="123456";//自己的密码
Connection conn = DriverManager.getConnection(url, username, password);
//3、定义sql语句
String sql="update account set money=2000 where id=1";
//4、获取执行sql对象Statement
Statement statement = conn.createStatement();
//5、执行sql(返回影响的行数)
int count = statement.executeUpdate(sql);
//6、处理结果
System.out.println(count);
//7、释放资源
statement.close();
conn.close();
报错信息
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Exception in thread "main" java.sql.SQLException: 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) to use a more specifc time zone value if you want to utilize time zone support.Caused by: 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) to use a more specifc time zone value if you want to utilize time zone support.
首先看报什么错,这里很明显是驱动名和链接的时区问题。
问题分析
原因一:java数据库连接使用UTC时区(世界标准时间),即serverTimezone=UTCurl: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true
原因二:MySQL使用的time_zone属性是+00:00,而北京时间比UTC时间早8小时,即UTC+08:00
解决方法
驱动名字不要写错
- mysql5.7的是Class.forName("com.mysql.jdbc.Driver");
- mysql8.0的是Class.forName("com.mysql.cj.jdbc.Driver");
修改mysql的时区
- 步骤一:修改java中的时区为东八区
// serverTimezone可以设置为北京时间GMT%2B8、上海时间Asia/Shanghai或者香港时间Hongkong
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
- 步骤二:修改MySQL数据库的时区为东八区
- 方法一:使用命令(优点:不需要重启MySQL服务,缺点:一旦MySQL服务被重启,设置就会消失)
mysql> set time_zone = ‘+8:00’;
mysql> set global time_zone = ‘+8:00’;
- 方法二:修改my.ini配置文件(优点:永久保存设置,缺点:需重启MySQL服务)
找到电脑中的my.ini配置文件,在[mysqld]下加上 default-time_zone=‘+8:00’,如下:
[mysqld]
// 设置默认时区
default-time_zone=‘+8:00’
然后重启mysql80,这里也是两种方法,第一就是右击此电脑,管理,找到MySQL80进行重启,第二种是打开命令窗口(以管理员的方式运行)
C:\\WINDOWS\\system32>net stop mysql80
MySQL80 服务正在停止..
MySQL80 服务已成功停止。
C:\\WINDOWS\\system32>net start mysql80
MySQL80 服务正在启动 .
MySQL80 服务已经启动成功。
就解决了问题!
kettle使用jdbc连接mysql之时区问题
kettle连接mysql报错
网上查询后才知道这是时区的问题,解决方法:
从cmd进入mysql进行操作:
之后成功:
以上是关于JDBC——解决MySQL8.0时区的问题的主要内容,如果未能解决你的问题,请参考以下文章
PyCharm Community 2019.2 连接MySQL8.0 时区不同步的解决