2010-12-19 77 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