我在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
。
删除该行解决了它。
答案 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)
尝试构建预调度插件并从配置文件中获取数据以进行查询