2010-02-22 7 views
1

Я использую следующие инструкции для получения некоторых регистров из моей базы данных.Результат запроса базы данных Zend преобразует значения столбца в нуль

Создание необходимых моделей (от модуля Params):

$obj_paramtype_model = new Params_Model_DbTable_Paramtype(); 
$obj_param_model  = new Params_Model_DbTable_Param(); 

Получение доступных локали из базы данных

// This returns a Zend_Db_Table_Row_Abstract class object 
$obj_paramtype = $obj_paramtype_model->getParamtypeByValue('available_locales'); 

// This is a query used to add conditions to the next sentence. This is executed from the Params_Model_DbTable_Param instance class, that depends from Params_Model_DbTable_Paramtype class (reference map and dependentTables arrays are fine in both classes) 
$obj_select = $this->select()->where('deleted_at IS NULL')->order('name'); 

// Execute the next query, applying the select restrictions. This returns a Zend_Db_Table_Rowset_Abstract class object. This means "Find Params by Paramtype" 
$obj_params_rowset = $obj_paramtype->findDependentRowset('Params_Model_DbTable_Param', 'Paramtype', $obj_paramtype); 

// Here the firebug log displays the queries.... 
Zend_Registry::get('log')->debug($obj_params_rowset); 

У меня есть профайлер для всех моих БД расстрелов из Zend. На этом этапе объекты журнала и профайлера (включая записи Firebug) показывают выполненные SQL-запросы, а в последней строке отображается итоговый объект класса Zend_Db_Table_Rowset_Abstract. Если я выполняю SQL-запросы в некотором MySQL-клиенте, результаты ожидаются. Но журнал записи Zend Firebug отображает как NULL значения столбца с латинскими символами (ñ).

Другими словами, внешний клиент SQL показывает es_CO | Español de Colombia и ru_RU | Английский, но результаты запроса от Zend отображаются (и возвращаются) es_CO | null и en_US | Английский.

Я удалил персонаж ñ от Español де Колумбии и результаты запроса просто отлично на моем экране Zend Log Firebug, и в конечном элементе Zend Form.

База данных MySQL, таблицы и столбцы содержатся в UTF-8 - utf8_unicode_ci. Все мои рамки рамки zend находятся в кодировке UTF-8. Я использую XAMPP 1.7.1 (PHP 5.2.9, Apache в порту 90 и MySQL 5.1.33-community), работающий на Windows 7 Ultimate; Zend Framework 1.10.1.

Прошу прощения, если есть так много информации, но я действительно не знаю, почему это могло произойти, поэтому я попытался предоставить как можно больше связанной информации, чтобы помочь найти ответ.

ответ

0

Как вы устанавливаете соединение с базой данных и определили ли вы кодировку в этом соединении? Это то, что я забыл, и поскольку я не могу найти его в вашем вопросе, это может быть проблемой? Так что, как я использую ini-файл для установки базы данных, добавление

resources.db.params.charset = utf8 

решили все мои проблемы UTF8 запрос. Надеюсь, это поможет.

+0

Я не мог найти ответа на этот вопрос в ближайшее время, поэтому решил использовать Doctrine в качестве моей Zend Framework DB ORM. Но этот ответ выглядит хорошо. Я собираюсь создать еще один проект, чтобы проверить его, и я вернусь, чтобы еще раз прокомментировать ваш ответ. Если это решит эту проблему, я помечаю этот ответ как таковой. Большое вам спасибо за вашу помощь и приятный день. –