2017-05-07 56 views
1

我遇到了一个非常奇怪的问题。Mysql Java连接器从服务器中检测到错误的时区

我的本地时区是UTC+8。我想服务器的时区也UTC+8根据下面的命令:

mysql> SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 
+--------------------------------+ 
| TIMEDIFF(NOW(), UTC_TIMESTAMP) | 
+--------------------------------+ 
| 08:00:00      | 
+--------------------------------+ 
1 row in set (0.01 sec) 

但Java的驱动程序检测服务器的时区为UTC-5。更具体地说,假设我的本地时间是13:00,如果我在数据库中插入new Date(),那么我插入的实际时间为00:00

但是,如果我将serverTimezone=Asia/Shanghai(这是UTF + 8)追加到mysql的url,一切都会好起来的。

详细信息服务器的信息文章

  • 的Ubuntu 14.04.5 LTS

  • 含量的/etc/timezoneAsia/Shanghai

  • MySQL服务器版本:5.6.31-0ubuntu0.14.04.2 -log(Ubuntu)

  • spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

  • 驱动程序版本:mysql:mysql-connector-java:6.0.5

我这个问题了很长一段时间困惑,任何人都可以给我一个答案?

回答

0

我认为这里的this线程的问题类似。我希望这会消除混乱。

+0

这是不同的。我想他忘记了造成这个问题的@列。 –

+0

如果您看看该线程中提供的答案,它清楚地解释了为什么java以不同的方式处理时区。如果您使用LocalTime而不是来自Java API的Date,则不会发现此类问题。是的日期在Java中有很多设计问题。这就是为什么他们添加了新的时间API灵感来自JODA时间 –

+0

但我想这不是日期的问题。因为如果我在连接网址后面加上'serverTimezone = Asia/Shanghai',一切都会很顺利。我已阅读Mysql手册,这应该是自动检测。 –