我正在尝试了解如何设置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列表中的时区名称相匹配是不可靠的。