以管理员身份登陆mysql 执行以下语句


mysql > SET time_zone = '+8:00';   # 此为北京时,我们所在东8区

   mysql> flush privileges;   # 立即生效

mysql插入timeStamp类型数据时间相差8小时的解决办法_mysql time_zone

这样就ok了,在让用户测试,发现问题已经解决了!!


如果做了上面的操作还没有生效的话,


请在my.cnf/my.ini的 [mysqld]下的第一行(和[mysqld]间不能有其他内容)中加上

default-time_zone = '+8:00'

然后重启mysql服务。

这种方式设置不管用,又找了一种方式

数据库时区没设置对,

serverTimezone=UTC或者GMT改成CTT(Asia&Shanghai)即可

完整的数据库url为:

spring.datasource.url=jdbc:mysql://127.0.0.1:3000/abc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&zeroDateTimeBehavior=convertToNull&useSSL=false


package com.aaa.chapter08;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
* Created by 张晨光 on 2020/3/12 15:44
*/
public class JDBC84 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动;
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获得连接对象
String url="jdbc:mysql://localhost:3306/School?useTimezone=true&serverTimezone=CTT&useUnicode=true&characterEncoding=utf8&useSSL=false";
String user="root";
String password="root";
Connection conn = DriverManager.getConnection(url, user, password);
//3.获得预编译语句对象,这个案例是增删改,这时候有3个问号
String sql="update student set age=?,pwd=?,birth=? where id=?";

PreparedStatement pstmt = conn.prepareStatement(sql);
//3.2给占位符赋值;这个知识点要求大家熟练掌握,C#String.format({0},{1})
pstmt.setInt(1,111);
pstmt.setString(2,"888999");
//1.过期的方法;year-1900,month:0-11,day:13
//pstmt.setDate(3,new java.sql.Date(2020-1900,2,13)); //设置日期格式
//2.方法;
// System.out.println(System.currentTimeMillis()); //当前时间的毫秒数;
// pstmt.setDate(3,new java.sql.Date(System.currentTimeMillis()));系统时间;
//pstmt.setDate(3,new java.sql.Date(System.currentTimeMillis()));
Date dt=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(dt);
//用这种方式最不容易出错,直接是将时间按照指定的格式出来,然后设置成了字符串
//不会有这个时区问题,时区问题java.sql.Date(值)有这个问题。
pstmt.setString(3,date); //这里直接是这种的。
pstmt.setInt(4,7);
//这里还是少8个小时,时区问题
//3.3执行一下
int result=pstmt.executeUpdate();
System.out.println(result);
//4.关闭资源;
pstmt.close();
conn.close();
}
}

 mysql插入timeStamp类型数据时间相差8小时的解决办法_CTT_02