Ошибка кодирования PDO UTF-8?

Я использую PDO для подключения к базе данных MYSQL

все таблицы в базе данных имеют utf8_unicode_ci Collation

вот мой код подключения:

<?php $mysql_username = "root"; $mysql_password = ""; $mysql_host = "localhost"; $mysql_database = "cms"; try { //connect global $db; $db = new PDO('mysql:dbname=' . $mysql_database . ';host=' . $mysql_host . ';charset=utf8;', $mysql_username, $mysql_password); $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8'); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $ex) { die("Unable Connect To DataBase"); } ?> 

в localhost у меня нет проблем с кодировкой, но когда я загрузил источник на хост, я вижу ?????? вместо персонажей?

Solutions Collecting From Web of "Ошибка кодирования PDO UTF-8?"

Эта:

 $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8'); 

совершенно бессмысленно. См. http://php.net/manual/en/ref.pdo-mysql.php . MYSQL_ATTR_INIT_COMMAND выполняется сразу после установления соединения, не позже. Если вы установите это на уже полностью созданном объекте PDO, это слишком поздно и никогда не выполняется. Вам нужно передать его конструктору:

 new PDO(..., ..., ..., array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')) 

Кроме того, если ваша версия PHP поддерживает его, добавьте charset=utf8 в DSN.