Forcing UTF-8 in Zend Framework with PDO
For some reason, I just had the most horrible time making sure that my connection from my Zend Framework code was speaking UTF8 at my database. Here are the key things to remember that I learned:
Make sure to have a collation of UTF8 on your database
Set your default charset on your table is UTF8
Zend_Db_Mysqluses PDO - so use PDO commands when you create your connection to force UTF8
Ok first thing’s first. Create the database with the proper collation:
CREATE SCHEMA `mydatabasename` DEFAULT CHARACTER SET utf8;
Next, define your tables with UTF8 charset:
CREATE TABLE `mynewtable` (`a` INT NULL ,`b` INT NULL) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8;
Finally, if configuring your PDO/MySQL connection in
application.ini, after defining the connection parameters, as I have, add the last two lines
resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "user" resources.db.params.password = "password" resources.db.params.dbname = "mynewtable" resources.db.isDefaultTableAdapter = true resources.db.params.charset = "utf8" resources.db.params.driver_options.1002 = "SET NAMES utf8;"
I never had a chance to track down the reasons “why” this was happening - so if anyone has any input, that would be great. But now I add this to all of my projects just to force it.