我正在使用 MySQL 数据库来存储一些包含德语变音符号 (äüö) 的字符串。表“testtable”和列“text”是 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">
然而,数据库中的文本“This is a testmessage äüöß”显示为“This is a testmessage ����”。当我将变音符号直接写入 PHP 文件的 HTML 或直接回显变音符号时,它们会正确显示,所以我认为编码错误一定是在数据库和 PHP 服务器之间的某个地方。
我忽略了哪些因素可能会弄乱这里的编码,或者我可以尝试找出问题的确切位置?