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/timezone
是Asia/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
我这个问题了很长一段时间困惑,任何人都可以给我一个答案?
这是不同的。我想他忘记了造成这个问题的@列。 –
如果您看看该线程中提供的答案,它清楚地解释了为什么java以不同的方式处理时区。如果您使用LocalTime而不是来自Java API的Date,则不会发现此类问题。是的日期在Java中有很多设计问题。这就是为什么他们添加了新的时间API灵感来自JODA时间 –
但我想这不是日期的问题。因为如果我在连接网址后面加上'serverTimezone = Asia/Shanghai',一切都会很顺利。我已阅读Mysql手册,这应该是自动检测。 –