2012-09-06 52 views
6

如何更改MYSQL区改为GMT格式像PHP这样的功能: /SET GMT时间/ date_default_timezone_set( 'ETC/GMT');MYSQL设置时区

我的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)。问题在哪里?
+0

我会强烈建议_against_使用'@'字符抑制你的错误。 – crmpicco

回答

3

后您这样写:

$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

+0

不起作用。服务器时间插入。 – user889349

+0

不起作用。如果我使用NOW(),则插入服务器时间(GMT-4)。问题在哪里? – user889349

+1

您是否在'选择'返回日期以检查插入内容之前是否再次运行'SET timezone'?如果你使用'mysql' CLI连接并运行查询,它将再次使用服务器时区。 –

1

MySQL有广泛timezone support。您可以在服务器级别,每个连接甚至每个查询上进行设置。我认为在__construct中执行'SET time_zone = xxx'已经足够了。

6

请尝试以下

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

由于使用命名的时区,如果已被创建并在mysql数据库中的时区信息表才会工作。

+2

'时区'剂量工作。改用time_zone –

3

从手册;

每连接时区。每个连接的客户端都有自己的时区设置,由会话time_zone变量给出。最初,会话变量将其值从全局变量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