Для корректной работы клиента с сервером MySQL надо правильно
установить 4 параметра кодировки подключения:
character_set_client - указывает, в какой кодировке будут поступать данные от клиента;
character_set_connection - указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса;
collation_connection - указывает, каким образом сравнивать между собой строки в запросах;
character_set_results - указывает серверу на необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту.
Если запрос и данные в БД находятся в одинаковой кодировке, и перекодировка результата не требуется, то вместо установки character_set_client, character_set_connection, character_set_results достаточно выполнить:
mysqli_query("SET NAMES 'utf8' ");
или, если collation не был задан при создании БД:
mysqli_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci' ");
PS: В MySQL версий > 4.1 кодировку и collation можно установить на уровне БД, на уровне таблицы, и даже на уровне отдельной записи в таблице, по ссылке выше есть примеры.