【问题标题】:What could break charsets between database and display?什么会破坏数据库和显示之间的字符集?
【发布时间】:2013-05-17 23:21:43
【问题描述】:

我正在使用 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,页面在head中声明为utf-8:

<meta charset="utf-8">

然而,数据库中的文本“This is a testmessage äüöß”显示为“This is a testmessage ����”。当我直接将变音符号写入PHP文件的HTML,或者直接回显变音符号时,它们都可以正确显示,所以我认为编码错误一定是在数据库和PHP服务器之间的某个地方。

我忽略了哪些因素可能会破坏此处的编码,或者我可以尝试找出问题的确切位置?

【问题讨论】:

  • 如果您还没有kunststube.net/frontback,建议您阅读本文
  • 哈哈,刚看了他关于编码的文章,很有启发性。接下来我会读这个:)

标签: php mysql utf-8 character-encoding diacritics


【解决方案1】:

PHPMyAdmin 只告诉你它自己的连接字符集,而不是关于数据库和你的应用程序之间的连接。尝试运行查询

SET NAMES utf8

在你建立连接之后

【讨论】:

  • 就是这样。谢谢!作为对潜在未来访问者的说明:必须在连接之后直接插入所述查询,甚至在mysql_select_db之前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多