Просто бих искал да предоставя малко повече подробности за решението, предложено от 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");
Надявам се, че това ще помогне да направим всичко по-разбираемо.