При първия поглед към http://www.nicknettleton.com/ zine/php/php-utf-8-cheatsheet Мисля, че едно важно нещо липсва (може би съм пренебрегнал това). В зависимост от вашата инсталация и/или конфигурация на MySQL трябва да настроите кодирането на връзката, така че MySQL да знае какво кодиране очаквате от страна на клиента (което означава, че клиентът страна на връзката MySQL, която трябва да бъде вашият PHP скрипт). Можете да направите това, като издадете ръчно
SET NAMES utf8
заявка преди всяка друга заявка, която изпращате до MySQL сървъра.
Ако използвате PDO от страна на PHP, можете да настроите връзката да издава автоматично тази заявка при всяко (повторно) свързване, като използвате
$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
при инициализиране на вашата db връзка.