如何在不同的时区处理MYSQL NOW()?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不同的时区处理MYSQL NOW()?相关的知识,希望对你有一定的参考价值。

我正在使用phpmysql。我有以下插入查询,工作正常。

$query="INSERT INTO mytable (user_id, user_datetime) VALUES ".
       "(".$_SESSION["user_id"].", NOW());";

问题是:

1)当我在我的localhost上测试时,NOW()正在从我的系统中选择日期和时间。那很好,没问题!

2)现在我已将我的网站托管到加拿大任何地方的网络托管服务器,我在印度。现在,如果发生任何插入,它将存储加拿大而不是印度的时间。这就是问题。我怎么能摆脱这个。如何在我的数据库中保存印度时间?

答案

您有两个解决方案:使用PHP方法或MySQL方法。 (你的问题标题是误导性的,它不是PHP NOW()而是MySQL NOW())。

使用PHP,您可以使用date_default_timezone_set函数。它将为PHP脚本设置默认时区。

只记得将它放在顶部附近,以便适用于你正在做的事情。

但这将设置所有PHP函数的时区,而不是MySQL数据库NOW()命令。

要修改MySQL的时区,您必须使用SET time_zone = timezonename;。请参阅this SO thread for setting MySQL timezoneofficial documentation

例:

<?php
date_default_timezone_set('Asia/Calcutta');
$query = "INSERT INTO mytable (user_id, user_datetime) VALUES ".
   "(".$_SESSION["user_id"].", ".date('Y-m-d H:i:s').");";

// OR

$query = "SET time_zone = 'Asia/Calcutta';"; // this will persist only for the current connection
$query .= "INSERT INTO mytable (user_id, user_datetime) VALUES ".
           "(".$_SESSION["user_id"].", NOW());";

以上是关于如何在不同的时区处理MYSQL NOW()?的主要内容,如果未能解决你的问题,请参考以下文章

选择 Now() 作为 CurrentDateTime mysql 时区

Medoo和时区

mySQL 将 NOW() 存储在正确的服务器时区吗? [复制]

MySQL now() 更改时区

如何在存储过程 MySql 中设置默认时区

在 PHP 和 MySQL 中设置时区