您的位置:首页 > 数据库 > MySQL

mysql 数据库时间字段时区问题

2018-11-29 16:43 239 查看

场景

项目中出现服务器时间正确,数据库时间正确,但是插入数据的时候时间出现时区问题,这边做下记录

`onWork_time` datetime DEFAULT NULL COMMENT '上班时间',
`offWork_time` datetime DEFAULT NULL COMMENT '下班时间',
onWork_time offWork_time
2018-11-29 00:03:17 2018-11-29 00:17:34

如上表格中,时间时有问题的,正确的时间应该是14点多

因为用的是相对最新版的5.7版本MySQL以及相对应的新版驱动jar包,因此这里的driver和url写法与以前的不太一样。
这是最新版驱动包相对于的写法配置

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://${mysql.address}/${mysql.schema}?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true&amp;zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
<property name="initialSize" value="10"/>
<property name="minIdle" value="10"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x' FROM DUAL"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<property name="filters" value="stat"/>
</bean>

而以前版本的url写法只要jdbc:mysql://localhost:3306/ss 就够了。
修改为

<property name="url" value="jdbc:mysql://${mysql.address}/${mysql.schema}?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=GMT%2b8"/>

在后面加上&serverTimezone=GMT%2b8

//北京时间东八区
serverTimezone=GMT%2B8
//或者使用上海时间
serverTimezone=Asia/Shanghai
  • 这个时区要设置好,不然会出现时差,
  • 如果你设置serverTimezone=UTC,连接不报错,
    但是我们在用java代码插入到数据库时间的时候却出现了问题。
  • 比如在java代码里面插入的时间为:2018-06-24 17:29:56
  • 但是在数据库里面显示的时间却为:2018-06-24 09:29:56
    有了8个小时的时差
  • UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: