mysql插入timeStamp类型数据时间相差8小时的解决办法
【摘要】
以管理员身份登陆mysql 执行以下语句
mysql > SET time_zone = '+8:00'; # 此为北京时,我们所在东8区 mysql> fl...
以管理员身份登陆mysql 执行以下语句
mysql > SET time_zone = '+8:00'; # 此为北京时,我们所在东8区
mysql> flush privileges; # 立即生效
这样就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();
-
}
-
}
文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。
原文链接:aaaedu.blog.csdn.net/article/details/104852044
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)