show variables like '%zone%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| system_time_zone | MST |
| time_zone | UTC |
+------------------+-------+
select version();
+-----------+
| version() |
+-----------+
| 8.0.31 |
+-----------+
我的物理位置定期变化,这通常意味着我在不同的时区。例如,上周我在PST,这周我在MST。
当我再次开始在我正在开发的基于JVM的应用程序上工作时,我得到了一个错误:
. lang。IllegalArgumentException: HOUR_OF_DAY: 0 ->1
深入研究这个问题,我偶然发现了这个问题;原因:"数据库中存储了一个DATETIME(在我的例子中是一个TIME列)值,该值在DST丢失的小时内。">
如果我真的关心时区,那就好了,我不关心。让我把所有的事情调整一下,然后继续我的一天。我有/etc/my.cnf
和default_time_zone='UTC'
,我的JDBC驱动程序通过connectionTimeZone=UTC
,我希望能做到这一点,但它没有。目前,我不得不将笔记本电脑的时钟设置为UTC作为解决方案,这在我看来是荒谬的。
所以,有没有一种方法来bash MySQL在头部,并允许我设置system_time_zone
为UTC,即使我的实际时区是PST, MST, EST等?或者也许一种只考虑time_zone
设置的方法也可能会奏效。
From MySQL docs
注意
对于某些Linux平台,MySQL安装从RPM或Debian包括systemd支持管理MySQL服务器启动和关闭。在这些平台上,没有安装mysqld_safe,因为这是不必要的。有关更多信息,请参见第2.5.9节"管理"MySQL Server with systemd " .
不使用mysqld_safe在使用Systemd对于服务器的管理是使用[mysqld_safe]或选项文件中的[safe_mysqld]部分不支持,可能导致致意外行为
例如/etc/my.cnf
的mysqld_safe
部分中的timezone
属性对基本上所有切换到systemd
的Linux发行版没有任何影响。
AFAICT,除了滚动你自己的mysqld_safe
启动脚本,让MySQL进程实际在UTC下运行的唯一方法是将你的系统时钟设置为UTC。
我想听听其他的;如果没有,那就太不幸了。
注。system_time_zone
是只读所以不能在MySQL命令行
设置编辑
有一种方法使用发行版提供的systemd
驱动MySQL。在我的工作站上(Fedora 36),编辑/etc/sysconfig/mysql
并添加"TZ"财产;对于UTC,您将执行TZ=UTC
。
看,system_time_zone
现在是UTC
,不管系统时钟。