解决MySQL存储时间出现不一致的问题

用Java在获取了系统时间后,存入MySQL数据库时,当时间的类型为datetime或Timestamp时发现数据库的存储与本地时间不一致。

很大原因是,MySQL设置的时区与你本地时区不一致造成的,解决办法可以修改MySQL的时区配置,这个大家网上搜一下就有了。

本人推荐第二种方法

就是在数据库连接的那个DBUtil类里根据你项目的实际需要进行设置,不如我在如下代码里更改了时区与亚洲上海同时区

private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://127.0.0.1:3306/mypetstore?serverTimezone=Asia/Shanghai&useSSL=false";

serverTimezone=Asia/Shanghai就是用来设置时区的。

在从MySQL里取出Timestamp数据时,显示到浏览器的时候,总会在末尾出现一个.0,很讨厌,怎么办呢?

可以使用如下EL表达式和JSTL标签的将其格式化,其中log.date就是所查出的时间数据

<fmt:formatDate value="${log.date}" type="date" pattern="yyyy-MM-dd HH:mm:ss" />

注意:若写成yyyy-MM-dd hh:mm:ss这样将区分不了上午与下午

补充:Mysql存储时间或日期错位问题

这里说一下mysql数据库添加记录的时候,出现日期错位一天或者时间不对的问题。

遇到问题的场景

代码逻辑没问题,单步执行发现存的时候日期也没错,但是存到数据库日期就不对了。

原因

原因就是你配置数据源连接加的参数内容的问题,如果没猜错你配置的serverTimezone这个参数应该是UTC,这个是使用的时区不对导致存数据的时候日期错位。

解决办法

把serverTimezone设置成Asia/Shanghai,如下图,这样再试一下,问题就解决了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • MySQL存储时间类型选择的问题讲解

    MySQL中存储时间通常会用datetime类型,但现在很多系统也用int存储unix时间戳,它们有什么区别?本人总结如下: int (1)4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点 (2)可读性极差,无法直观的看到数据 TIMESTAMP (1)4个字节储存 (2)值以UTC格式保存 (3)时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区. (4)TIMESTAMP值不能早于1970或晚于20

  • 解析MySQL中存储时间日期类型的选择问题

    一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime(javaBean中用Date类型) 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores w

  • 如何选择合适的MySQL日期时间类型来存储你的时间

    构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp. 不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢? 那我们就一步一步来分析他们的特点,这样我们根据自己的需求选择合适的字段类型来存储 (优点和缺点是比较出来的  , 跟父母从小喜欢拿邻居小孩子跟自己比一样的) datetime 和 timestamp datetime 更像日历上

  • 解决MySQL存储时间出现不一致的问题

    用Java在获取了系统时间后,存入MySQL数据库时,当时间的类型为datetime或Timestamp时发现数据库的存储与本地时间不一致. 很大原因是,MySQL设置的时区与你本地时区不一致造成的,解决办法可以修改MySQL的时区配置,这个大家网上搜一下就有了. 本人推荐第二种方法 就是在数据库连接的那个DBUtil类里根据你项目的实际需要进行设置,不如我在如下代码里更改了时区与亚洲上海同时区 private static String driver = "com.mysql.cj.jdbc.

  • mysql 主从数据不一致,提示: Slave_SQL_Running: No 的解决方法

    本文实例讲述了mysql 主从数据不一致,提示: Slave_SQL_Running No 的解决方法.分享给大家供大家参考,具体如下: 在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No 表示slave不同步 解决方法一(忽略错误,继续同步): 1.先停掉slave mysql> stop slave; 2.跳过错误步数,后面步数可变 mysql>

  • MySQL 主从复制数据不一致的解决方法

    目录 1. 准备工作 1.1 主机配置 1.2 从机配置 2. 数据不一致问题 3. 原因分析 4. 问题解决 5. 小结 今天来说说 MySQL 主从复制数据不一致的问题,通过几个具体的案例,来向小伙伴们展示 binlog 不同 format 之间的区别. 1. 准备工作 以下配置基于 Docker. 我这里有一张简单的图向大伙展示 MySQL 主从的工作方式: 这里,我们准备两台机器: 主机:10.3.50.27:33061 从机:10.3.50.27:33062 1.1 主机配置 主机的配

  • 如何解决mysql insert乱码的问题

    问题介绍: 在mysql中插入中文乱码,或mysql中中文正常显示,但jsp在前台显示mysql中的中文时乱码. 解决方法: 进入mysql控制台,执行下面的命令即可: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8'; 更多解决办法: client 为客户端使用的字符集. connection 为连接数据库的字符集设置类型,如果程序没有指明

  • 解决MySQL时区日期时差8个小时的问题

    目录 场景: 解决: mysql查出时间相差14小时 问题重现 问题排查 场景: 我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的 解决: 1.在 mysql 的服务端的 my.conf 文件中 [mysqld] 节点下设置时区参数 default-time-zone=Asia/Shanghai 2.如果 mysql 的版本是 5.7 配置如下参数 default-time-zone = '+8:00' 3.如果

  • 解决mySQL中1862(phpmyadmin)/1820(mysql)错误的方法

    发现问题 之前一直运行的好好的,突然mysql就无法工作了.请求命令后报错误:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement ,使用phpMyAdmin管理工具也无法登录,显示错误:#1862 无法登录 MySQL 服务器 错误解决 进入mysql的服务器中使用mysql指令进行登录及操作. 1.登录mysql:mysql -uroot -proot (root是我的帐号及密码) 2.尝试是否报1

  • 完美解决mysql客户端授权后连接失败的问题

    在本地(192.168.1.152)部署好mysql环境,授权远程客户机192.168.1.%连接本机的mysql,在iptables防火墙也已开通3306端口. 如下: mysql> select host,user,password from mysql.user; +--------------+-----------------+---------------------------------------------------------+ | host | user | passw

  • 解决MySQL 5.7.9版本sql_mode=only_full_group_by问题

    MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not func

  • 解决MYSQL出现Can''t create/write to file ''#sql_5c0_0.MYD''的问题

    今天我上网站的管理后台,登录时提示 MySQL error:Can't create/write to file '#sql_5c0_0.MYD' MySQL server error: Can't create/write to file 'C:/WINDOWS/TEMP/#sql_a80_0.MYD' (Errcode: 17) ( 1 ) 根据从网上搜索问题提示和自己遇到的情况分析.解决办法如下: 说明: 出现这个问题是由于服务器环境不允许执行数据库校验,无法进行此操作. 解决思路和原因:

  • 解决mysql安装时出现error Nr.1045问题的方法

    我们在windows下安装MySQL时会出现Access denied for user 'root'@localhost'(using password:No)的问题,这个问题是因为你的机器上之前安装过mysql,或者这 一次安装配置了新密码,进入应用的最后一步时候由于某些原因卡出了或者由于服务未启动等原因导致无法配置成功,最终结果是,配置未成功,密码设置已经保存 进去了.这样我们调整好了服务等原因后,进行重新配置的时候,会发现在设置密码的时候,多了一个旧密码输入框.其实这也没什么,在密码知道

随机推荐