场景
项目中出现服务器时间正确,数据库时间正确,但是插入数据的时候时间出现时区问题,这边做下记录
`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&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&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&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&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八个小时