show variables like '%zone%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| system_time_zone | MST |
| time_zone | UTC |
+------------------+-------+
select version();
+-----------+
| version() |
+-----------+
| 8.0.31 |
+-----------+我的物理位置定期变化,这通常意味着我在一个不同的时区。例如,上周我在PST,这周我在MST。
当我再次开始开发基于JVM的应用程序时,我得到了一个类似于以下内容的错误:
java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
深入了解我在本期中遇到的问题;原因是:“数据库中存储了一个日期时间(在我的例子中是一个时间列)值,该值位于DST丢失小时内。”
如果我真的关心时区的话,那就好了。让我把所有的事情都告诉你,继续我的一天。我有/etc/my.cnf和default_time_zone='UTC',我的JDBC驱动程序通过了connectionTimeZone=UTC,我希望它能做到这一点,但它做不到。目前,我不得不将笔记本的时钟设置为UTC,作为一个解决办法,这是IMO的荒谬之处。
那么,是否有一种方法可以打击MySQL并允许我将system_time_zone设置为UTC,即使我的实际时区是PST、MST、EST等等?或者,一种只考虑time_zone设置的方法可能也能做到这一点。
发布于 2022-11-16 01:51:53
来自MySQL文档
备注 对于某些Linux平台,来自RPM或Debian包的MySQL安装包括对管理MySQL服务器启动和关闭的系统d支持。在这些平台上,没有安装mysqld_safe,因为它是不必要的。有关更多信息,请参见第2.5.9节“使用systemd管理MySQL服务器”。 在使用systemd进行服务器管理的平台上不使用mysqld_safe的一个含义是,不支持在选项文件中使用mysqld_safe或safe_mysqld部分,并可能导致意外行为。
例如,timezone属性在/etc/my.cnf的mysqld_safe部分,基本上不会对每个切换到systemd的Linux发行版产生任何影响。
除了滚动您自己的mysqld_safe启动脚本之外,让MySQL进程在UTC中全面运行的唯一方法是将您的系统时钟设置为UTC。
我很想听别的,如果不是,那就太不幸了。
附注:system_time_zone是只读的,甚至不能在MySQL CLI中设置它
编辑
有一种方法使用发行版提供的systemd驱动的MySQL。在我的工作站(Fedora 36)上,编辑/etc/sysconfig/mysql并添加"TZ“属性;对于UTC,您将执行TZ=UTC。
瞧,无论系统时钟如何,system_time_zone现在都是UTC。
https://stackoverflow.com/questions/74453481
复制相似问题