我在 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'
之类的操作,但我确实需要在配置文件中执行此操作。
编辑
谷歌搜索我发现 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
。
删除该行解决了它。
最佳答案
我正在回答我自己的问题只是为了结束这个问题,因为回复已经在其中一个编辑中。
resources.db.params.charset
和
resources.db.params.driver_options.1002
因为我在我的 application.ini 中不能一起使用,因为 resources.db.params.charset
overwirites driver_options.1002
。
如果需要设置时区,移除resources.db.params.charset
并在driver_options
的charset 中传递时区。
例如:
resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'"
关于php - 如何在 application.ini 中设置数据库时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4484965/