Я просто хотел бы предоставить более подробную информацию о решении, предложенном vartec , которое (в зависимости от вашей установки MySQL) является наиболее правильным решением вашей проблемы.
Прежде всего, проблема с набором символов / кодированием в MySQL является довольно сложной темой, которая подробно рассматривается в руководстве по MySQL Глава 9.1 «Поддержка набора символов» . В вашем случае особенно 9.1.4. «Наборы символов соединения и сопоставления» будут наиболее актуальными.
Короче говоря: MySQL должен знать, какой набор символов / кодировка ожидает ваше клиентское приложение (исходя из точки зрения базы данных, это ваш PHP-скрипт), поскольку оно перекодирует все строковые данные из внутреннего набора символов / кодировки, определенного на уровне сервера, базы данных, таблицы или столбца в кодировку / кодировку соединения. Вы используете UTF-8 на стороне клиента, поэтому должны сообщить MySQL, что вы используете UTF-8. Это делается командой MySQL SET NAMES 'utf8'
, которую необходимо отправить в качестве первого запроса при открытии соединения. В зависимости от вашей установки и клиентской библиотеки MySQL, которую вы используете в сценарии PHP, это может быть сделано автоматически при каждом подключении.
Если вы используете PDO, это просто вопрос настройки параметра конфигурации
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Использование mysqli для изменения клиентского набора символов / кодировки еще проще:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
Надеюсь, это поможет сделать все это более понятным.