2010-12-19 49 views
21

我在Zend Framework中有一個應用程序,它必須運行與服務器不同的時區。有沒有在application.ini中設置數據庫服務器(本例中爲MySQL)時區的選項?如何在application.ini中設置數據庫時區

我目前的選擇是:

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8" 
resources.db.params.host = "localhost" 
resources.db.params.username = "usernam" 
resources.db.params.password = "password" 
resources.db.params.dbname = "databasename" 

我知道我可以這樣做SET timezone = 'Europe/London',但我真的需要做的是在配置文件中。

編輯

周圍的Googling我發現resources.db.params.driver_options.1002應該PDO::MYSQL_ATTR_INIT_COMMAND被設定的值。

因此resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'"應該做的伎倆。但到目前爲止沒有運氣。

最後編輯

發現了它。 很多搜​​索和調試後,我發現下面的代碼在Zend的\ DB \適配器\ PDO \ Mysql.php

if (!empty($this->_config['charset'])) { 
    $initCommand = "SET NAMES '" . $this->_config['charset'] . "'"; 
    $this->_config['driver_options'][1002] = $initCommand; // 1002 = PDO::MYSQL_ATTR_INIT_COMMAND 
} 

正如我在我的application.ini有resources.db.params.charset = "utf8",它覆蓋PDO::MYSQL_ATTR_INIT_COMMAND

刪除該行解決了它。

+0

不同於web服務器,還是不同於MySQL服務器? – 2010-12-19 20:42:21

+0

與兩臺服務器不同。 – Esteban 2010-12-19 20:48:37

回答

14

我回答我自己的問題只是爲了解決這個問題,因爲回覆已經在其中一個編輯中。

resources.db.params.charset 

resources.db.params.driver_options.1002 

,因爲我曾在我的application.ini不能一起使用,因爲resources.db.params.charset ovewirites driver_options.1002

如果您需要設置時區,請刪除resources.db.params.charset並在driver_options的字符集中傳遞時區。 例如:

resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'" 
+1

如果當我在「SET NAMES'utf8'中設置其他任何東西時,它會返回503錯誤? – 2014-09-01 16:41:24

0

嘗試建立預調度插件,並從配置文件數據查詢

4

這個工作對我來說:

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.driver_options.1002 = "SET NAMES 'utf8', CHARACTER SET 'utf8', time_zone = 'Europe/London'" 
3

您不妨考慮將其添加在你的引導:

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { 
    protected function _initTimeZone() { 
     date_default_timezone_set('Asia/Manila'); 
    } 
} 
+4

date_default_timezone_set設置php的時區,而不是mysql服務器。這相當於:php.settings.date.timezone ='Asia/Manila'in application.ini – Esteban 2011-03-10 11:17:26