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

举报
tea_year 发表于 2021/12/23 00:26:15 2021/12/23
【摘要】 以管理员身份登陆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
 


  
  1. package com.aaa.chapter08;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. /**
  9. * Created by 张晨光 on 2020/3/12 15:44
  10. */
  11. public class JDBC84 {
  12. public static void main(String[] args) throws ClassNotFoundException, SQLException {
  13. //1.加载驱动;
  14. Class.forName("com.mysql.cj.jdbc.Driver");
  15. //2.获得连接对象
  16. String url="jdbc:mysql://localhost:3306/School?useTimezone=true&serverTimezone=CTT&useUnicode=true&characterEncoding=utf8&useSSL=false";
  17. String user="root";
  18. String password="root";
  19. Connection conn = DriverManager.getConnection(url, user, password);
  20. //3.获得预编译语句对象,这个案例是增删改,这时候有3个问号
  21. String sql="update student set age=?,pwd=?,birth=? where id=?";
  22. PreparedStatement pstmt = conn.prepareStatement(sql);
  23. //3.2给占位符赋值;这个知识点要求大家熟练掌握,C#String.format({0},{1})
  24. pstmt.setInt(1,111);
  25. pstmt.setString(2,"888999");
  26. //1.过期的方法;year-1900,month:0-11,day:13
  27. //pstmt.setDate(3,new java.sql.Date(2020-1900,2,13)); //设置日期格式
  28. //2.方法;
  29. // System.out.println(System.currentTimeMillis()); //当前时间的毫秒数;
  30. // pstmt.setDate(3,new java.sql.Date(System.currentTimeMillis()));系统时间;
  31. //pstmt.setDate(3,new java.sql.Date(System.currentTimeMillis()));
  32. Date dt=new Date();
  33. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  34. String date = sdf.format(dt);
  35. //用这种方式最不容易出错,直接是将时间按照指定的格式出来,然后设置成了字符串
  36. //不会有这个时区问题,时区问题java.sql.Date(值)有这个问题。
  37. pstmt.setString(3,date); //这里直接是这种的。
  38. pstmt.setInt(4,7);
  39. //这里还是少8个小时,时区问题
  40. //3.3执行一下
  41. int result=pstmt.executeUpdate();
  42. System.out.println(result);
  43. //4.关闭资源;
  44. pstmt.close();
  45. conn.close();
  46. }
  47. }

 

 

文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/104852044

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。