Zend DB и кодирование

Я только что столкнулся с чем-то довольно странным, я использую Zend Framework 1.10 с модулем Zend_Db_Table для чтения некоторых данных из базы данных. Сама база данных, таблица и соответствующие поля имеют свой набор настроек «utf8_general_ci», и все специальные символы отображаются правильно отформатированными в БД при проверке с помощью phpMyAdmin. Кроме того, сохранение с помощью Zend_Db_Table работает очень хорошо, но когда я читаю данные и просто отсылаю их в свой браузер, он возвращается как ISO-8859-1, а не как UTF8. Я заметил то же самое, пытаясь использовать json_encode (который работает только с строками UTF8 в качестве ввода) на значение, возвращаемое из БД.

Как установить, чтобы Zend_Db_Table / Zend_Db_Row всегда работал с UTF8 и возвращал мне значение UTF8? Я еще ничего не задал в кодировке в приложении.

Большое спасибо за вашу помощь!

Просто заметьте. В моем случае это помогло:

$this->db = new Zend_Db_Adapter_Pdo_Mysql(array( 'host' => $config['db_hostname'], 'username' => $config['db_username'], 'password' => $config['db_password'], 'dbname' => $config['db_database'], 'charset' => 'utf8' )); 
 resources.db.params.charset = utf8 

как сказал robertbasic.

Хорошо, только что нашел решение, попробуйте сделать это:

 $db = Zend_Db::factory($config->database); // Setting up the DB $db->query("SET NAMES 'utf8';"); // That's the magic line I was missing 

Надеюсь, это поможет кому-то еще в какой-то момент 🙂

Также вы можете просто поместить ключ «charset» с нужным значением в конфигурацию, а DB-драйвер выполнит соответствующий запрос (в зависимости от используемой СУБД). Кажется, что в настоящее время (версия 1.10.5) почти все драйверы поддерживают это.