2010-12-19 7 views
21

Tengo una aplicación en Zend Framework que debe ejecutarse para una zona horaria diferente a la del servidor. ¿Existe una opción para establecer el huso horario del servidor de base de datos (MySQL, en este caso) en application.ini?Cómo configurar la zona horaria de la base de datos en application.ini

Mis opciones actuales son:

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" 

Sé que puedo hacer algo como SET timezone = 'Europe/London', pero realmente tienen que hacerlo en el archivo de configuración.

EDITAR

googlear alrededor descubrí que resources.db.params.driver_options.1002 se debe fijar el valor para PDO::MYSQL_ATTR_INIT_COMMAND.

Por lo tanto, resources.db.params.driver_options.1002 = "SET NAMES utf8, time_zone = 'Europe/London'"debería hacer el truco. Pero sin suerte hasta el momento.

edición final

encontrado. Después de mucho buscar y depuración me encontré con el siguiente código al 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 
} 

Como tengo resources.db.params.charset = "utf8" en mi application.ini, se sobrescribe PDO::MYSQL_ATTR_INIT_COMMAND.

Eliminar esa línea lo resolvió.

+0

¿Diferente al servidor web, o diferente del servidor MySQL? –

+0

Diferente de ambos servidores. – Esteban

Respuesta

14

Estoy respondiendo mi propia pregunta solo para cerrar esto, ya que la respuesta ya está en uno de los cambios.

resources.db.params.charset 

y

resources.db.params.driver_options.1002 

ya que tuve en mi application.ini no pueden usarse juntos, como resources.db.params.charset ovewirites driver_options.1002.

Si necesita configurar la zona horaria, elimine resources.db.params.charset y pase la zona horaria en el juego de caracteres en driver_options. P. ej .:

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

¿Qué sucede si cuando configuro algo más en "SET NAMES 'utf8'" devuelve el error 503? –

0

Trate de construir pre plugin de envío y obtener datos de archivo de configuración para la consulta

4

Esto funciona para mí:

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

que también podría considerar la adición en su archivo de arranque:

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

date_default_timezone_set establece la zona horaria para php, no el servidor mysql. Eso sería equivalente a: phpSettings.date.timezone = 'Asia/Manila' en application.ini – Esteban

Cuestiones relacionadas