Я использую базу данных MySQL для хранения некоторых строк, содержащих немецкие умлауты (äüö). Таблица «testtable» и столбец «текст» сопоставлены utf8_bin, и PHPMyAdmin сообщает мне, что «соединение MySQL» также является utf8_bin.
Затем я использую PHP-скрипт для чтения строк и их отображения:
$sql = "SELECT `text` FROM `testtable` WHERE `id`=$id";
$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, false);
mysql_select_db(MYSQL_DATABASE,$db);
$result = mysql_query($sql,$db);
if (!$result or mysql_errno()) die("Something was wrong with the query: $sql");
$rows = array();
while(($rows[] = mysql_fetch_assoc($result)) || array_pop($rows));
foreach ($rows as $r) {echo $r['text']}
Сам файл закодирован в utf-8 по моему редактору, а страница объявлена как utf-8 в шапке:
<meta charset="utf-8">
Тем не менее, текст «Это тестовое сообщение äüöß» в базе данных отображается как «Это тестовое сообщение ����». Когда я пишу умлауты непосредственно в HTML файла PHP или напрямую эхо-умлауты, они отображаются правильно, поэтому я полагаю, что ошибка кодирования должна быть где-то между базой данных и PHP-сервером.
Какие факторы, которые я упустил из виду, могут испортить кодировку здесь, или что я могу попытаться выяснить, в чем именно заключается проблема?