详解mysql中url时区的陷阱该如何规避


本文摘自PHP中文网,作者小云云,侵删。

最近在使用mysql的6.0.x以上的jar的时候,需要在代码url的链接里面指定serverTimezone。就会出现异常,这个问题问题,是关于mysql中url时区的,发现这个陷阱如果大家不注意可能都会遇到,本文主要和大家分享mysql中url时区的陷阱该如何规避。

1.未指定serverTimezone

xml里面配置url

1

<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy"/>

出现的异常

1

Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

您必须配置服务器或JDBC驱动程序(通过serverTimezone配置属性),如果您想要使用时区支持,则需要使用一个更详细的时区值。

2.网上的解决方案

在url后面加上参数?serverTimezone=utc

1

<property name="url" value="jdbc:mysql://localhost:3306/springdatastudy?serverTimezone=UTC"/>

2.1.遇到的问题

虽然上面加上时区程序不出错了,但是我们在用java代码插入到数据库时间的时候却出现了问题。

比如在java代码里面插入的时间为:2017-08-21 17:29:56

但是在数据库里面显示的时间却为:2017-08-21 09:29:56

3.根本原因

因为时区设置的问题。

UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。

UTC + (+0800) = 本地(北京)时间

4.解决方案

url的时区使用中国标准时间。也是就serverTimezone=Asia/Shanghai

4.1 使用java代码获取本地的时区id

1

2

3

4

Calendar cal = Calendar.getInstance();

TimeZone timeZone = cal.getTimeZone();

System.out.println(timeZone.getID());

System.out.println(timeZone.getDisplayName());

1

2

Asia/Shanghai

中国标准时间

相关推荐:

MySQL中or语句用法示例

MySQL中关于索引与触发器详解

MySQL中关于日期函数汇总

以上就是详解mysql中url时区的陷阱该如何规避的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql中关于排名函数的具体介绍

mysql update 语句一个“经典”的坑

如何修改mysql中列的默认值

php入门教程之使用mysqli操作数据库的方法(连接,查询,事务回滚等)

mysql查询数据之合并查询结果

mysql中关于exists和not exists的示例分享

怎样用mysql建表?

如何以rpm方式安装mysql odbc驱动

如何开启mysql慢查询日志配置

详解关于mysql查询字符集不匹配问题

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...