2010-12-19 16 views
21

Mam aplikację w Zend Framework, która musi działać w innej strefie czasowej niż serwer. Czy istnieje opcja ustawienia strefy czasowej serwera bazy danych (MySQL w tym przypadku) w pliku application.ini?Jak ustawić strefę czasową bazy danych w aplikacji.ini

Moje obecne są opcje:

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" 

wiem, że mogę zrobić coś takiego SET timezone = 'Europe/London', ale naprawdę trzeba to zrobić w pliku konfiguracyjnym.

EDIT

Googling wokół znalazłem że resources.db.params.driver_options.1002 należy ustawić wartość dla PDO::MYSQL_ATTR_INIT_COMMAND.

Dlatego resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'"powinien zrobić lewę. Ale do tej pory nie było szczęścia.

EDIT FINAL

znalazł. Po wielu poszukiwaniach i debugowania Znalazłem następujący kod w 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 
} 

Jak mam resources.db.params.charset = "utf8" w moim application.ini, został nadpisywania PDO::MYSQL_ATTR_INIT_COMMAND.

Usunięcie tej linii rozwiązało.

+0

inny niż serwer WWW, lub inny niż serwer MySQL? –

+0

Inaczej niż oba serwery. – Esteban

Odpowiedz

14

Odpowiadam na moje własne pytanie, aby to zamknąć, ponieważ odpowiedź jest już w jednej z edycji.

resources.db.params.charset 

i

resources.db.params.driver_options.1002 

jak miałem w moim application.ini nie mogą być używane razem, jak resources.db.params.charset ovewirites driver_options.1002.

Jeśli musisz ustawić strefę czasową, usuń resources.db.params.charset i przekaż strefę czasową w zestawie znaków w driver_options. Np .:

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

Co się stanie, jeśli ustawię cokolwiek innego w "SET NAMES" utf8 "", zwróci błąd 503? –

0

Spróbuj zbudować pre wtyczki wysyłki i pobrać dane z pliku konfiguracyjnego dla zapytania

4

Działa to dla mnie:

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

równie dobrze można rozważyć dodanie go na bootstrap:

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

date_default_timezone_set ustawić strefę czasową dla php, a nie dla serwera mysql. Byłoby to równoznaczne z: phpSettings.date.timezone = "Asia/Manila" w application.ini – Esteban

Powiązane problemy