Я только что столкнулся с чем-то довольно странным, я использую 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) почти все драйверы поддерживают это.