如何在application.ini中设置数据库时区

时间:2010-12-19 20:36:21

标签: php mysql zend-framework

我在Zend Framework中有一个应用程序,它必须运行与服务器不同的时区。是否可以选择在application.ini?

中设置数据库服务器(在本例中为MySQL)时区

我目前的选择是:

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'之类的事情,但我确实需要在配置文件中执行此操作。

修改

在Google上搜索我发现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 \ Adapter \ 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

删除该行解决了它。

4 个答案:

答案 0 :(得分: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的字符集中传递时区。 E.g:

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

答案 1 :(得分:4)

这对我有用:

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

答案 2 :(得分:3)

您可以考虑在引导程序中添加它:

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

答案 3 :(得分:0)

尝试构建预调度插件并从配置文件中获取数据以进行查询