Все эти методы shoud работают, за исключением некоторых особых обстоятельств. Например, если вы запускаете веб-сервер локально на компьютере Windows с php <5.3.1, только запрос 'db-> вручную' ("SET NAMES 'utf8'"); прежде чем ваш фактический запрос будет работать.
Любой другой метод, пытающийся использовать MYSQL_ATTR_INIT_COMMAND, потерпит неудачу.
Вот что я узнал сегодня, борясь с этой самой проблемой:
Вы не можете ссылаться на PDO :: MYSQL_ATTR_INIT_COMMAND в некоторых средах (т.е. моей, в частности, я не знаю). Вы должны явно использовать 1002 вместо
В Zend Framework 1.11 (возможно, начиная с версии 1.8, следует подтвердить), вам не нужно устанавливать database.params.driver_options.1002 = "SET NAMES utf8" в вашем config.ini: resources.db. params.charset = "utf8" будет достаточно для Zend_Db_Adapter_Pdo_Mysql, чтобы сделать это для вас.
В Windows вам нужно php> = 5.3.1, чтобы MYSQL_ATTR_INIT_COMMAND работал.
Если вы замените свою версию php на 5.3.1 или выше (я также протестировал 5.3.3), вам нужно убедиться, что вы установили значение pdo_mysql.default_socket в вашем php.ini. Пустое значение по умолчанию не будет работать (будет подтверждено: я прочитал кое-что об этом, но не удосужился попробовать без него после выяснения о пункте 5)
Вам также необходимо убедиться, что у вас есть скрытый системный файл windows \ system32 \ drivers \ etc \ hosts '127.0.0.1 localhost' (это не было проблемой для php 5.3.0)
Имея все это в виду, вы должны быть в состоянии уберечь от себя день погугливания и сохранить некоторые свои волосы! ;)