软件版本
- 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 服务已经启动成功。
就解决了问题!