如何获取MySQL的当前时区?

25 浏览
0 Comments

如何获取MySQL的当前时区?

有没有人知道在MySQL中获取服务器的时区设置的函数?

更新

这个没有输出任何有效的信息:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+

如果MySQL无法知道实际使用的time_zone,那没关系 - 只要我能得到有效的信息(不像SYSTEM),我们也可以涉及PHP

0
0 Comments

问题出现的原因:

在MySQL中,有时需要获取当前的时区信息。然而,MySQL并没有直接提供一个函数或命令来获取当前的时区。因此,用户需要找到一种方法来获取当前的时区信息。

解决方法:

用户可以使用以下查询来获取当前的时区信息:

SELECT @_time_zone;

该查询将返回系统相关的时区信息,比如"PST"。

如果用户想要确定当前会话的时区,可以使用以下查询:

SELECT IF(@.time_zone = 'SYSTEM', @_time_zone, @.time_zone);

该查询将返回会话时区,如果会话时区与系统时区不同的话。

需要注意的是,如果时区由于夏令时的变化而发生更改,该查询仍然会报告服务器启动时“记住”的时区,而不是当前的时区。这是一个缺点,可以参考mysql bug 9518。

另外一个缺点是,该查询似乎返回的是系统区域设置的信息,所以可能会显示类似于"�������� ���� (����)"的内容。

以上就是获取MySQL当前时区的原因和解决方法。

0
0 Comments

MySQL中获取当前时区的方法是使用以下查询:

select timediff(now(),convert_tz(now(),@.time_zone,'+00:00'));

这个查询返回当前会话的时区。这是正确的答案,因为它展示了'SYSTEM'作为时区在转换中是被识别的,使得它完全足够将NOW()转换为任何时区。

感谢这个方法,我能够获得我想要的格式:

select time_format(timediff(now(),convert_tz(now(),@.time_zone,'+00:00')),'%H%i');

更简单的方法是使用SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)

或者使用SELECT TIMESTAMPDIFF(SECOND, NOW(), UTC_TIMESTAMP);来获取秒数差异。

0
0 Comments

从上述内容中可以得出,提问者想要获取MySQL的当前时区,并且希望能够通过MySQL的结果来获取PHP的当前时区。然而,MySQL并没有提供直接获取时区的功能,但是可以通过设置连接的时区来间接获取。

为了解决这个问题,可以通过以下步骤来获取MySQL的当前时区和PHP的当前时区:

1. 在MySQL中执行以下命令来获取MySQL的全局时区和客户端特定时区的当前值:

mysql> SELECT @@global.time_zone, @@session.time_zone;

2. 如果MySQL的结果是`SYSTEM`,那么可以使用PHP的`date_default_timezone_get`函数来获取系统的时区信息:

$timeZone = date_default_timezone_get();

3. 如果你想要设置连接的时区,可以在MySQL中执行以下命令来设置时区:

SET time_zone = '+00:00';

4. 注意,MySQL中的时间和日期值并不存储时区信息,所以获取MySQL的时区只对当前时间相关的函数(如`now()`,`unix_timestamp()`等)有用,对于数据库中存储的日期和时间,你需要确保它们是以特定时区存储的或者将它们统一转换为GMT时间。

总之,要获取MySQL的当前时区,可以通过查询全局和客户端特定时区的值来间接获取。如果MySQL的结果是`SYSTEM`,可以使用PHP的函数来获取系统的时区信息。然而,要了解数据库中存储的日期和时间的时区信息,你需要确保它们是以特定时区存储的或者转换为统一的GMT时间。

0