MYSQL在PHP代码中设置时区


MYSQL set timezone in PHP code

如何将MYSQL TIMEZONE更改为GMT格式,如PHP中的以下函数:/设置GMT时区/date_default_timezone_set('Etc/GMT');

我的DB类在这里:

class DB {
    private static $instance;
    private $MySQLi;
    private function __construct(array $dbOptions){
        $this->MySQLi = @ new mysqli(   $dbOptions['db_host'],
                                        $dbOptions['db_user'],
                                        $dbOptions['db_pass'],
                                        $dbOptions['db_name'] );
        if (mysqli_connect_errno()) {
            throw new Exception('Database error.');
        }
        $this->MySQLi->set_charset("utf8");
    }
    public static function init(array $dbOptions){
        if(self::$instance instanceof self){
            return false;
        }
        self::$instance = new self($dbOptions);
    }
    public static function getMySQLiObject(){
        return self::$instance->MySQLi;
    }
    public static function query($q){
        return self::$instance->MySQLi->query($q);
    }
    public static function prepare($q){
        return self::$instance->MySQLi->prepare($q);
    }
    public static function esc($str){
        return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
    }
}

我在其他文件中的查询如下:

DB::query('UPDATE `calendar_data` SET `data` = "'.DB::esc(json_encode($array)).'", `upcoming_time` = "'.date('Y-m-d H:i:s', $upcoming).'", `time_now` = NOW() WHERE `id` = "1"');

我应该在哪里将查询插入到类中以便运行一次?

谢谢!

$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
  • 不起作用。如果我使用NOW(),则插入了服务器时间(GMT-4)。哪里有问题

尝试以下操作:

$this->MySQLi->query("SET time_zone = '+0:00'");

只有当MySQL数据库中的时区信息表已经创建并填充时,才可以使用命名时区。

写完这个之后:

$this->MySQLi->set_charset("utf8");

同时写下:

$this->MySQLi->query("SET timezone = 'GMT'");

此时区设置将应用于将来在该连接上发送的所有查询。

此外,请确保您已经在mysql数据库中设置了区域表。

http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

来自手册;

每个连接时区。每个连接的客户端都有自己的时区设置,由会话time_zone变量给定。最初,会话变量从全局时区变量中获取其值,但客户端可以使用以下语句更改自己的时区:

mysql> SET time_zone = timezone;

所以一定是这样;

$this->MySQLi->query("SET time_zone = 'GMT'");

http://dev.mysql.com/doc/refman/5.5/en//time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en//server-system-variables.html#sysvar_time_zone

MySQL具有广泛的时区支持。您可以在服务器级别、每个连接甚至每个查询上设置它。我认为在__construct中执行"SET time_zone=xxx"就足够了。