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

Est*_*ban 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"
Run Code Online (Sandbox Code Playgroud)

我知道我可以做类似的事情SET timezone = 'Europe/London',但我真的需要在配置文件中做到这一点.

编辑

谷歌搜索我发现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
}
Run Code Online (Sandbox Code Playgroud)

就像我resources.db.params.charset = "utf8"在我的application.ini中一样,它被覆盖了PDO::MYSQL_ATTR_INIT_COMMAND.

删除该行解决了它.

Est*_*ban 14

我正在回答我自己的问题只是为了关闭它,因为响应已经在其中一个编辑中.

resources.db.params.charset
Run Code Online (Sandbox Code Playgroud)

resources.db.params.driver_options.1002
Run Code Online (Sandbox Code Playgroud)

正如我在我的应用程序中resources.db.params.charset所做的那样,不能像ovewirites 一样使用driver_options.1002.

如果需要设置时区,请删除resources.db.params.charset并在charset中传递时区driver_options.例如:

resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'"
Run Code Online (Sandbox Code Playgroud)