`
不爱不见
  • 浏览: 283833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql的日期比时间查了14个小时

 
阅读更多
今天使用mybatis查询mysql中的数据时,莫名其妙的所有时间都出错了,所有时间都比数据库时间多了14小时,考虑了一下,初步判定是系统时区的问题。因为mysql时区设置默认是操作系统时区,查看了下centos时区,东8区没有错,所以可以判定是代码里面设置了一个错误的时区。


现在开始调试mybatis源码,调试到mysql-connector-java-6.0.4.jar包的com.mysql.cj.jdbc.io.JdbcTimestampValueFactory的createFromTimestamp方法时,发现mysql的底层驱动程序对从数据库查询出来的时间用了一个Calender做类型转换,Calender记录中包含的时区为CST,跟中国的时区Asia/Shanghai正好差了14小时。


那么为什么mybatis连接数据库会使用CST的美国时间呢?继续查看源码发现

mysql连接数据库的时候会从mysql读取系统的时区设置,调试com.mysql.cj.mysqla.MysqlaSession.java的configureTimezone方法发现,this.getServerVariable("system_time_zone")从系统里面读出来的时区设置是CST


至此问题已经清楚了,是mysql设置的时区不对,登陆linux,执行mysql -uroot -p, 然后运行命令show variables like '%time_zone%',发现system_time_zone项果然是CST。


至此,排查问题结束,修改一下mysql的时区设置即可。

作者:许武顺
链接:http://www.jianshu.com/p/ea7ef2d29940
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分享到:
评论

相关推荐

    Mysql 时间模糊查询

    DATE_FORMAT函数用于格式化日期时间,常用于日期时间的比较。例如,查询生日在特定时间段内的会员: ```sql SELECT * FROM user WHERE DATE_FORMAT(birthday, '%m-%d') >= '06-03' AND DATE_FORMAT(birthday, '%m-%...

    MySQL日期查询[定义].pdf

    MySQL 日期查询是 MySQL 中的一种查询方式,用于处理日期和时间相关的数据。它提供了多种函数来操作日期和时间,包括日期查询、日期计算、日期比较等。 日期查询函数 MySQL 提供了多种日期查询函数,用于查询日期...

    mysql的日期和时间函数.rar

    通过深入学习和实践这些MySQL日期和时间函数,开发者可以更有效地管理数据库中的日期和时间数据,创建出更加精确和复杂的查询语句。这个教程文档“mysql的日期和时间函数.doc”应该包含了详细解释和实例,帮助读者更...

    mysql时间日期函数

    在MySQL数据库中,时间日期函数是处理与时间相关的数据时不可或缺的一部分。这些函数提供了丰富的功能,可以帮助用户在查询、更新或插入数据时精确地操作日期和时间。下面将详细介绍几个核心的时间日期函数及其应用...

    MySQL时间日期相关函数

    - 这些函数分别用于提取日期时间中的年、月、日、小时、分钟和秒。 8. **ADDDATE()** 和 **SUBDATE()**: - ADDDATE() 是 DATE_ADD() 的别名,SUBDATE() 是 DATE_SUB() 的别名。 9. **TIMESTAMPDIFF()**: - ...

    使用LabVIEW操作ACCESS、MySQL、SQL server数据库实现按照时间段查询数据

    需要注意的是,针对不同的数据库系统(如MySQL和SQL Server),SQL语句的语法可能会有所不同,特别是对于日期时间的处理和特定功能的使用。在实际应用中,需要根据目标数据库的特点调整SQL语句。 通过学习和实践...

    JAVA8时间插入mysql少了8小时的解决办法(csdn)————程序.pdf

    在Java 8中,开发人员经常遇到一个棘手的问题,即在使用MyBatis或任何其他JDBC驱动程序将`LocalDateTime`对象插入MySQL数据库时,时间会比预期少8小时。这个问题通常与时区设置有关,特别是涉及到数据库服务器和Java...

    mysql 统计一天24小时数据默认补0SQL

    1. **创建一个包含过去7天日期的临时表**:类似于创建24小时的时间表,我们可以创建一个包含过去7天日期的临时表。 2. **统计每天的任务创建数量**:从任务表中统计过去7天每天的任务创建数量。 3. **执行左连接...

    mysql时间比较

    MySQL 提供了一系列的功能来处理日期和时间相关的数据,包括但不限于日期时间的比较、加减运算等。接下来,我们将深入探讨如何在 MySQL 中进行时间比较及其相关的操作。 #### 一、基本的时间加减操作 在 Oracle 中...

    mysql日期函数总结

    ### MySQL日期函数总结 在MySQL数据库管理中,处理日期与时间是常见的需求之一。通过使用各种日期函数,我们可以实现对日期进行格式化、计算日期之间的差异等操作,从而提高数据处理效率。本文将对MySQL中常用的...

    MySQL时间日期格式化

    MySQL作为一款广泛使用的数据库管理系统,提供了丰富的日期和时间处理函数,使得开发人员能够方便地进行日期时间的数据操作。本文将重点介绍MySQL中与时间日期相关的格式化函数及其应用场景,帮助读者更好地理解和...

    Mysql中日期的查询.docx

    ### MySQL日期数据类型 在探讨查询方法之前,首先简要介绍MySQL支持的几种日期相关的数据类型: - **DATE**:仅存储日期部分(年、月、日),格式为'YYYY-MM-DD'。 - **TIME**:仅存储时间部分(小时、分钟、秒),...

    mysql的日期和时间函数

    注意,如果依着包含一个时间部分的间隔增加或减少一个日期值,该日期值将被自动地转换到一个日期时间值: mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 DAY); -> 1999-01-02mysql> SELECT DATE_ADD("1999-01-...

    mysql 日期函数相关操作

    在MySQL中,日期和时间函数提供了丰富的功能,用于处理日期和时间数据,这对于数据库管理和查询极为关键。...以上只是MySQL日期函数的一部分,通过合理应用这些函数,可以极大提高数据查询和处理的效率与准确性。

    mysql 时间差及字符串时间转换

    例如,将当前时间的字符串形式转换为日期时间类型: ```sql SELECT STR_TO_DATE(NOW(), '%Y-%m-%d %H:%i:%s') FROM DUAL; ``` 这里,`'%Y-%m-%d %H:%i:%s'`模式对应的是"年-月-日 时:分:秒"的格式。 3. **...

    Mysql获取当前日期的前几天日期的方法

    Mysql根据时间查询日期的优化技巧mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间解析MySQL中存储时间日期类型的选择问题JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、...

    mysql取得两个时间之间的差值

    在MySQL数据库中,获取两个时间之间的差值是一项常见的操作,特别是在数据分析、日志记录或时间戳处理等场景中。这个任务可以通过SQL查询语句轻松完成。以下将详细讲解如何使用MySQL来计算时间差值。 首先,我们...

    MYSQL时间处理(全)

    以上操作简单明了地展示了如何使用MySQL内置函数来处理日期时间,这对于快速获取特定格式或调整时间间隔非常有用。 #### 二、复杂的时间区间统计 接下来,我们将探讨更复杂的基于时间区间的数据统计操作。例如,...

    MySQL日期数据类型、MySQL时间类型使用总结.docx

    以下是关于MySQL日期和时间类型的详细说明: 日期类型: 1. **datetime**:占用8字节存储空间,格式为`YYYY-MM-DD HH:MM:SS`,支持的日期范围从1000-01-01 00:00:00到9999-12-31 23:59:59。datetime类型适用于存储...

Global site tag (gtag.js) - Google Analytics