2012-09-06 50 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