在一台服务器上,当我运行:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)

在另一台服务器上:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)

当前回答

您可以在启动服务器时指定服务器的默认时区,请参阅http://dev.mysql.com/doc/refman/5.1/en/server-options.html,特别是——default-time-zone=timezone选项。可以查看全局时区和会话时区

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

使用set语句设置其中一个或两个,更多细节请参见http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html。

其他回答

如果你使用PDO:

$offset="+10:00";
$db->exec("SET time_zone='".$offset."';");

如果你正在使用MySQLi:

$db->MySQLi->query("SET time_zone='".$offset."';");

关于格式化偏移量的更多信息: https://www.sitepoint.com/synchronize-php-mysql-timezone-configuration/

在Windows (IIS)上,为了能够SET GLOBAL time_zone = 'Europe/Helsinki'(或其他什么),MySQL time_zone描述表需要首先填充。

我是从这个链接https://dev.mysql.com/downloads/timezones.html下载的

运行下载的SQL查询后,我能够设置全局time_zone和解决问题,我有SELECT NOW();返回的是格林尼治标准时间而不是英国夏令时。

要为当前会话设置它,请执行:

SET time_zone = timezonename;

这是一个10年前的问题,但不管怎样,这里有一个对我有用的方法。我使用MySQL 8.0与Hibernate 5和SpringBoot 4。

我试过上面的答案,但对我不起作用,对我有效的是:

db.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Europe/Warsaw

如果这对你有帮助,别忘了给它投票

您可以在启动服务器时指定服务器的默认时区,请参阅http://dev.mysql.com/doc/refman/5.1/en/server-options.html,特别是——default-time-zone=timezone选项。可以查看全局时区和会话时区

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

使用set语句设置其中一个或两个,更多细节请参见http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html。