Данные MySQL UTF8 не отображаются должным образом - PullRequest
4 голосов
/ 22 августа 2011

Я хочу, чтобы все данные в MySQL были в кодировке UTF8.Я установил все наборы символов и параметры сортировки как UTF8 для базы данных, таблиц и столбцов.Прежде чем что-то записать в базу данных, я использую mb_detect_encoding в PHP, чтобы проверить, является ли это UTF8.Таким образом, я считаю, что все данные в кодировке UTF8.

Однако здесь возникает проблема: возьмите это слово Ríkarðsdóttir, оно корректно отображается при запросе из базы данных и отображается через PHP на веб-странице в кодировке UTF8.Если я запрашиваю эту же запись через phpMyAdmin, я получаю RÃkarà ° sdóttir.То же самое верно, если я использую командную строку MySQL.

Running SHOW VARIABLES returns to me:
character_set_client    utf8,
character_set_connection    utf8,
character_set_database  utf8,
character_set_filesystem    binary,
character_set_results   utf8,
character_set_server    latin1,
character_set_system    utf8

Только сервер является latin1, и я нахожусь на сайте общего хостинга и не верю, что смогу это изменить.Может ли это быть проблемой?

Вот что я не понимаю: почему моя веб-страница UTF8 правильно отображает Ríkarðsdóttir, а веб-страница phpMyAdmin в кодировке UTF отображает ее как RÃkarà ° sdóttir?Действительно ли данные не кодированы в кодировке UTF8 или база данных не верит в это?Что нужно сделать, чтобы исправить это?

1 Ответ

3 голосов
/ 22 августа 2011

Попробуйте выполнить этот запрос сразу после подключения:

SET NAMES UTF8

Ваша база данных должна хранить данные как UTF8, а заголовок вашей веб-страницы также должен иметь объявление UTF8, но ваше подключение к базе данных такженеобходимо использовать UTF8.Вы можете запустить это в командной строке и / или через PHPMyAdmin.Все сообщения после этого «запроса» будут в кодировке UTF8.

...