Я хочу, чтобы все данные в 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 с кодировкой UTF8 отображает ее как RÃkarðsdóttir? Действительно ли данные не закодированы в кодировке UTF8 или база данных не считает, что это так? Что нужно сделать, чтобы исправить это?