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

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)

当前回答

如果有人正在使用GoDaddy共享主机,你可以尝试以下解决方案,为我工作。

当启动DB连接时,在我的PDO对象中设置time_zone命令,例如:

$pdo = new PDO($dsn, $user, $pass, $opt);
$pdo->exec("SET time_zone='+05:30';");

其中“+05:30”是印度时区。您可以根据需要更改。

在那之后;所有与日期和时间相关的MySQL进程都设置了所需的时区。

来源:https://in.godaddy.com/community/cPanel-Hosting/How-to-change-TimeZone-for-MySqL/td-p/31861

其他回答

MySQL和PHP的时区设置:

记住:

更改时区系统。Ubuntu的例子: $ sudo dpkg-reconfigure tzdata 重启服务器或者重启Apache 2和MySQL: /etc/init.d / mysql重启

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

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

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

通过登录MYSQL服务器来设置MYSQL时区。为是

SET SESSION time_zone = '+5:30';

然后运行SELECT NOW();

如果有人正在使用GoDaddy共享主机,你可以尝试以下解决方案,为我工作。

当启动DB连接时,在我的PDO对象中设置time_zone命令,例如:

$pdo = new PDO($dsn, $user, $pass, $opt);
$pdo->exec("SET time_zone='+05:30';");

其中“+05:30”是印度时区。您可以根据需要更改。

在那之后;所有与日期和时间相关的MySQL进程都设置了所需的时区。

来源:https://in.godaddy.com/community/cPanel-Hosting/How-to-change-TimeZone-for-MySqL/td-p/31861

我觉得这个可能有用:

MySQL中有三个地方可以设置时区:

在[mysqld]部分的“my.cnf”文件中

default-time-zone='+00:00'

@@global。time_zone变量

要查看它们被设置为什么值:

SELECT @@global.time_zone;

要为它设置一个值,可以使用其中任何一个:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(使用像“欧洲/赫尔辛基”这样的命名时区意味着你必须有一个正确填充的时区表。)

记住+02:00是一个偏移量。欧洲/柏林是一个时区(有两个偏移量),CEST是一个时钟时间,对应于特定的偏移量。

@@session。time_zone变量

SELECT @@session.time_zone;

要设置它,可以使用任何一个:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

两者都可能返回SYSTEM,这意味着它们使用my.cnf中设置的时区。

要使时区名称生效,必须设置需要填充的时区信息表:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html。在这个回答中,我还提到了如何填充这些表。

获取当前时区偏移量为TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

如果您的时区是+2:00,它将返回02:00:00。

获取当前UNIX时间戳:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

获取时间戳列作为UNIX时间戳

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

获取一个UTC datetime列作为UNIX时间戳

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

注意:改变时区不会改变存储的日期时间或时间戳,但它会为现有的时间戳列显示不同的日期时间,因为它们在内部存储为UTC时间戳,而在外部显示为当前MySQL时区。

我在这里做了一个备忘单:MySQL是否应该将它的时区设置为UTC?