Linux上的MariaDB system_time_zone格式(缩写与IANA)

时间:2016-08-02 14:57:41

标签: java mysql linux timezone mariadb

我正在尝试了解如何设置MariaDB / MySQL system_time_zone 全局变量,以防配置未提供。

因此,在Linux机器上,我们通过将 / etc / localtime 链接到IANA tz数据库中的条目来配置服务器时区。 欧洲/赫尔辛基,其 EEST 时区缩写:

$date
Tue Aug  2 17:27:38 EEST 2016

使用默认配置启动MariaDB后,我们会看到:

MariaDB> show global variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | EEST                |
| time_zone        | SYSTEM              |

所以 system_time_zone 是缩写,而不是IANA名称。 问题是在使用Java 8运行 Connector / J 并且 useLegacyDatetimeCode = false 之后,大多数服务器时区正在导致

org.mariadb.jdbc.internal.util.dao.QueryException: The server time_zone 'EEST' cannot be parsed.                                        

在启动期间,因为当前实现的 Connector / J (我们使用1.3.6)在IANA tz数据库中搜索 system_time_zone 的值:

  

org.mariadb.jdbc.internal.util.Utils#getTimeZone获取

public static TimeZone getTimeZone(String id) throws SQLException {
    TimeZone tz = java.util.TimeZone.getTimeZone(id);
    ...
    return tz;
}

java.util.TimeZone.getTimeZone 正在使用IANA tz数据库。

IANA数据库中存在一些缩写,例如: MST或HST,但显然将缩写与IANA列表中的时区名称相匹配是不可靠的。

0 个答案:

没有答案