show variables like '%zone%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| system_time_zone | MST |
| time_zone | UTC |
+------------------+-------+
select version();
+-----------+
| version() |
+-----------+
| 8.0.31 |
+-----------+
我的实际位置会定期变更,这通常表示我在不同的时区。例如,上周我在PST,本周我在MST。
当我再次开始开发基于JVM的应用程序时,我得到了一个错误沿着所示:
异常错误:一天中的小时:0 -〉1
在挖掘这件事时我偶然发现了this issue;原因:“数据库中存储了一个DATETIME(在我的情况下是TIME列)值,该值在DST损失的小时数内。”
如果我真的关心时区,那就好了,我不关心。让我协调所有的事情,继续我的一天。我有/etc/my.cnf
与default_time_zone='UTC'
和我的JDBC驱动程序传递connectionTimeZone=UTC
,我希望这样做的伎俩,但它没有。目前我必须设置我的笔记本电脑的时钟为UTC作为一个变通办法,这是IMO,荒谬的。
那么,是否有一种方法可以将MySQL击垮,并允许我将system_time_zone
设置为UTC,即使我的实际时区是PST、MST、EST等?或者,也许有一种方法可以只考虑time_zone
设置。
1条答案
按热度按时间xcitsw881#
从MySQL docs开始
备注
对于某些Linux平台,从RPM或Debian软件包安装MySQL包括systemd支持,用于管理MySQL服务器的启动和关闭。在这些平台上,由于不需要mysqld_safe,因此不会安装它。有关详细信息,请参见第2.5.9节“使用systemd管理MySQL服务器”。
在使用systemd进行服务器管理的平台上不使用mysqld_safe的一个含义是,不支持在选项文件中使用[mysqld_safe]或[safe_mysqld]节,这可能会导致意外行为。
比如
/etc/my.cnf
的mysqld_safe
部分中的timezone
属性,基本上对每个切换到systemd
的Linux发行版都没有任何影响。AFAICT,除了运行您自己的
mysqld_safe
启动脚本之外,让MySQL进程真正以UTC全面运行的唯一方法是将系统时钟设置为UTC。我很乐意听到其他的;如果没有,那就太不幸了。
p.s.
system_time_zone
是 * 只读 * 的,因此甚至无法在MySQL CLI中对其进行设置编辑
有一种方法可以使用发行版提供的
systemd
驱动的MySQL。在我的工作站(Fedora 36)上,编辑/etc/sysconfig/mysql
并添加“TZ”属性;对于UTC,您将执行TZ=UTC
。瞧,不管系统时钟如何,
system_time_zone
现在都是UTC
。