Caused by:
com.mysql.cj.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.
翻译:
mysql无效连接属性异常:服务器时区值无法辨认或表示多个时区,如果你想使用时区支持,你必须通过服务器时区配置属性来配置服务器或JDBC驱动从而使用更具体的时区值。
通过对异常信息分析我们可以得知有两种方式可以处理此异常
//查看mysql时间;
mysql> select now();
±--------------------+
| now() |
±--------------------+
| 2018-10-23 09:08:07 |
±--------------------+
//或者输入下行命令查看mysql当前时间
mysql> select curtime();
±----------+
| curtime() |
±----------+
| 09:13:34 |
±----------+
mysql> show variables like “%time_zone%” ;
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | SYSTEM |
| time_zone | SYSTEM |
±-----------------±-------+
强调: mysql默认使用system时区,system_time_zone同样使用system时区。
//修改mysql全局时区为东八区,即表示北京时间
mysql> set global time_zone = ‘+8:00’;
//立即生效
mysql> flush privileges ;
//时区修改生效之后,再次查询mysql时区
mysql> show variables like “%time_zone%” ;
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | +08:00 |
| time_zone | +08:00 |
±-----------------±-------+
//修改当前会话时区为东八区
mysql> set time_zone = ‘+8:00’;
//当然另一种方法就是通过修改配置文件来更改时区
查看widows系统时区步骤,打开cmd–>输入control timedate.cpl
UTC协调世界时(universal time coordinated),又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC.
在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时(UTC,Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich MeanTime)一样,都与英国伦敦的本地时相同。UTC与GMT含义完全相同。
下图表示的是在Windows可视视图中设置系统时区,仅作参考。
北京时区是东八区,领先UTC 8个小时,在电子邮件信头的Date域记为+0800。如果在电子邮件的信头中有这么一行:
Date: Sun, 13 June 2018 09:45:28+0800
说明信件发送地时间是2018年6月13号,星期日,上午9点45分28秒,该地区本地时领先UTC差8个小时(+0800,就是东八区时间)。电子邮件信头的Date域使用24小时的时钟,而不使用AM和PM来标记上下午。
以这个电子邮件的发送时间为例,如果要把这个时间转化为UTC,可以使用以下公式:
UTC +时区差=本地时间
时区差东为正,西为负。为此,把东八区时区差记为 +0800,
UTC + (+0800) =本地(北京)时间 (1)
那么,UTC = 本地时间(北京时间))-0800 (2)
0945 - 0800 =0145
即UTC是当天凌晨1点45分28秒。若结果是负数就意味着是UTC前一天(即昨天),把这个负数加上2400就是UTC在前一天的时间。例如,本地(北京)时间是0325 (凌晨3点25分),那么,UTC就是 0325 - 0800 = -0475,负号意味着是前一天, -0475 + 2400= 1925,既前一天的晚上7点25分。
纽约的时区是西五区,比UTC落后五个小时,记为 -0500:
UTC +(-0500)= 纽约时间 (3)
UTC = 纽约时间 +0500 (4)
把(2)式-(4)式
UTC = 北京时间 -0800 = 纽约时间 + 0500 (5)
即 北京时间=纽约时间+1300 (6)
即北京时间领先纽约时间十三个小时,由(6)式,
纽约时间 = 北京时间-1300 (7)
重要的公式 UTC+时区差=本地时间
时区差东为正,西为负。例如,东八区(北京)是+0800,西五区(纽约)是-0500,加州是西八区,是-0800,美国中部时区是西六区,-0600,美国山地时区是西七区,-0700,太平洋时区是西八区,-0800,在夏天使用夏时制,成为-0700。德国时区是东一区,+0100,夏天变为+0200。
多数电子邮件程序,例如OutlookExpress,在显示时间时,计算机程序把时间先转换成为本地时间再显示,例如,邮件的Date域为:
Date:Sun, 13 June 2018 09:45:28+0800
Outlook Express在显示时就显示为:
Date:Sat, 12 June 2018 08:45:28pm,(相差13个小时) 即把北京时间转换成为了纽约时间,而且把二十四小时格式的时间转换成为了十二小时的格式。
参考: http://blog.csdn.net/kongjiea/article/details/44061117
下面是mysql在Linux系统中的时区选项,参考https://blog.csdn.net/qq631431929/article/details/51731834
通常我们设置为String url = “jdbc:mysql://localhost:3306/db?&serverTimezone=UTC”,但UTC比北京时间早8个钟头,我们看下面时区Hongkong表示东八区,即表示北京时间。如果我们想表示北京时间,改为String url = "jdbc:mysql://localhost:3306/db?&serverTimezone=Hongkong"即可。
drwxr-xr-x 2 root root 4096 5月 27 12:56 Africa/
drwxr-xr-x 6 root root 4096 5月 27 12:56 America/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Antarctica/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Arctic/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Asia/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Atlantic/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Australia/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Brazil/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Canada/
-rw-r–r-- 1 root root 2102 4月 21 02:09 CET
drwxr-xr-x 2 root root 4096 5月 27 12:56 Chile/
-rw-r–r-- 1 root root 2294 4月 21 02:09 CST6CDT
-rw-r–r-- 1 root root 2437 4月 21 02:09 Cuba
-rw-r–r-- 1 root root 1876 4月 21 02:09 EET
-rw-r–r-- 1 root root 1972 4月 21 02:09 Egypt
-rw-r–r-- 1 root root 3559 4月 21 02:09 Eire
-rw-r–r-- 1 root root 127 4月 21 02:09 EST
-rw-r–r-- 1 root root 2294 4月 21 02:09 EST5EDT
drwxr-xr-x 2 root root 4096 5月 27 12:56 Etc/
drwxr-xr-x 2 root root 4096 5月 27 12:56 Europe/
-rw-r–r-- 1 root root 264 4月 21 02:09 Factory
-rw-r–r-- 1 root root 3687 4月 21 02:09 GB
lrwxrwxrwx 1 root root 2 5月 27 09:07 GB-Eire -> GB
-rw-r–r-- 1 root root 127 4月 21 02:09 GMT
lrwxrwxrwx 1 root root 3 5月 27 09:07 GMT0 -> GMT
lrwxrwxrwx 1 root root 3 5月 27 09:07 GMT-0 -> GMT
lrwxrwxrwx 1 root root 3 5月 27 09:07 GMT+0 -> GMT
lrwxrwxrwx 1 root root 3 5月 27 09:07 Greenwich -> GMT
-rw-r–r-- 1 root root 1189 4月 21 02:09 Hongkong
-rw-r–r-- 1 root root 128 4月 21 02:09 HST
-rw-r–r-- 1 root root 1190 4月 21 02:09 Iceland
drwxr-xr-x 2 root root 4096 5月 27 12:56 Indian/
-rw-r–r-- 1 root root 1678 4月 21 02:09 Iran
-rw-r–r-- 1 root root 4475 2月 24 17:01 iso3166.tab
-rw-r–r-- 1 root root 2265 4月 21 02:09 Israel
-rw-r–r-- 1 root root 507 4月 21 02:09 Jamaica
-rw-r–r-- 1 root root 355 4月 21 02:09 Japan
-rw-r–r-- 1 root root 237 4月 21 02:09 Kwajalein
-rw-r–r-- 1 root root 10384 2月 22 23:58 leap-seconds.list
-rw-r–r-- 1 root root 655 4月 21 02:09 Libya
lrwxrwxrwx 1 root root 14 5月 27 09:07 localtime -> /etc/localtime
-rw-r–r-- 1 root root 2102 4月 21 02:09 MET
drwxr-xr-x 2 root root 4096 5月 27 12:56 Mexico/
-rw-r–r-- 1 root root 127 4月 21 02:09 MST
-rw-r–r-- 1 root root 2294 4月 21 02:09 MST7MDT
-rw-r–r-- 1 root root 2453 4月 21 02:09 Navajo
-rw-r–r-- 1 root root 2460 4月 21 02:09 NZ
-rw-r–r-- 1 root root 2057 4月 21 02:09 NZ-CHAT
drwxr-xr-x 2 root root 4096 5月 27 12:56 Pacific/
-rw-r–r-- 1 root root 2705 4月 21 02:09 Poland
-rw-r–r-- 1 root root 3453 4月 21 02:09 Portugal
drwxr-xr-x 19 root root 4096 5月 27 12:56 posix/
-rw-r–r-- 1 root root 3545 4月 21 02:09 posixrules
-rw-r–r-- 1 root root 414 4月 21 02:09 PRC
-rw-r–r-- 1 root root 2294 4月 21 02:09 PST8PDT
drwxr-xr-x 19 root root 4096 5月 27 12:56 right/
-rw-r–r-- 1 root root 800 4月 21 02:09 ROC
-rw-r–r-- 1 root root 571 4月 21 02:09 ROK
-rw-r–r-- 1 root root 428 4月 21 02:09 Singapore
drwxr-xr-x 2 root root 4096 5月 27 12:56 SystemV/
-rw-r–r-- 1 root root 2747 4月 21 02:09 Turkey
-rw-r–r-- 1 root root 127 4月 21 02:09 UCT
lrwxrwxrwx 1 root root 4 5月 27 09:07 Universal -> Zulu
drwxr-xr-x 2 root root 4096 5月 27 12:56 US/
lrwxrwxrwx 1 root root 4 5月 27 09:07 UTC -> Zulu
-rw-r–r-- 1 root root 1873 4月 21 02:09 WET
-rw-r–r-- 1 root root 1528 4月 21 02:09 W-SU
-rw-r–r-- 1 root root 17533 4月 13 16:01 zone1970.tab
-rw-r–r-- 1 root root 19014 4月 13 16:01 zone.tab
-rw-r–r-- 1 root root 127 4月 21 02:09 Zulu
参考mysql时区设置
(Greenwich Mean Time)是格林尼治平时:
由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。 为了确保协调世界时(UTC)与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒1。
也就是说,UTC 基本上等于GMT
CST同时可以代表如下 4 个不同的时区:
Central Standard Time (USA) UTC-6:00
Cuba Standard Time UTC-4:00
China Standard Time UTC+8:00
Central Standard Time (Australia) UTC+9:30
可见,CST可以同时表示中国,美国,澳大利亚,古巴四个国家的标准时间。 也就是说,这个需要根据使用的场景来确定使用的是哪个时区。
(英语:Central European Time,CET)欧洲中部时间是比世界标准时间(UTC)早一个小时的时区名称之一。它被大部分欧洲国家和部分北非国家采用。冬季时间为UTC+1,夏季欧洲夏令时为UTC+2。
欧洲中部夏令时间(Central European Summer Time,简称CEST)比世界标准时间(UTC)早两个小时的时区名称之一。它被大部分欧洲国家和部分北非国家在夏天采用(UTC+2),冬季这些国家使用欧洲中部时间(UTC+1)
关系:
UTC=GMT(世界协调时等同于格林尼治平时)
CST=UTC/GMT +08:00(中国标准时间)
CET=UTC/GMT + 01:00(欧洲中部时间)
CEST=UTC/GMT + 02:00(欧洲中部夏令时)
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。
参考 http://blog.csdn.net/kongjiea/article/details/44061117. ↩︎