У меня есть приложение в Zend Framework, которое должно запускаться для другого часового пояса, чем сервер. Есть ли возможность установить часовой пояс сервера базы данных (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'
, но мне действительно нужно сделать это в файле конфигурации.
РЕДАКТИРОВАТЬ
Подойдя вокруг, я обнаружил, что 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 }
Поскольку у меня есть resources.db.params.charset = "utf8"
в моем приложении application.ini, он переписывал PDO::MYSQL_ATTR_INIT_COMMAND
.
Удаление этой линии решило ее.
Я отвечаю на свой вопрос, просто чтобы закрыть это, так как ответ уже находится в одном из исправлений.
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'"
Это работает для меня:
resources.db.adapter = "Pdo_Mysql" resources.db.params.driver_options.1002 = "SET NAMES 'utf8', CHARACTER SET 'utf8', time_zone = 'Europe/London'"
вы можете также рассмотреть возможность добавления его в свой загрузочный лоток:
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initTimeZone() { date_default_timezone_set('Asia/Manila'); } }
Попробуйте создать предварительный плагин отправки и получить данные из файла конфигурации для запроса