Результат запроса к базе данных Zend преобразует значения столбца в ноль - PullRequest
1 голос
/ 22 февраля 2010

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

Создайте необходимые модели (из модуля 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 и en_US | Английский для Соединенных Штатов , но запрос выводится из Zend (и возвращает) es_CO | null и en_US | Английский из США .

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

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

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

1 Ответ

0 голосов
/ 12 марта 2010

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

resources.db.params.charset = utf8

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

...