【发布时间】:2010-07-01 23:28:50
【问题描述】:
我的脚本绝对是以 UTF-8 保存的。我正在用"{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8" 实例化 PDO。我的表使用 InnoDB 并使用 utf8_general_ci 进行整理。我的页面使用Content-Type: text/html; charset=UTF-8 标头或<meta> 等效项发送。
当使用 PDO 在源代码中存储来自 HTTP 输入或字符串文字的 € 字符时,根据 MySQL Workbench 5.2,我留下了 c3 a2 e2 80 9a c2 ac。从数据库中检索并在页面上显示它可以正常工作。然而在 phpMyAdmin 和 Workbench 中,我看到了€。
当使用这两个工具存储 € 时,我留下了 e2 82 ac,这显然是正确的 UTF-8 表示,但如果我尝试检索然后用 PHP 输出它,就会显示 �。
我的问题是,这种差异是从哪里产生的,是否有可能让我的网页和数据库工具都能完美运行?
【问题讨论】:
-
奇怪,听起来你做的一切都是对的。您是否 1000% 确定您的数据库连接是 UTF-8?您可以发送
SET NAMES utf8;查询以确认一下吗? -
您的浏览器是否忽略了编码?该字符集是建议性的,如果您已将其配置为这样做,浏览器将忽略它。不同浏览器中的行为是否相同?在不同的机器上?
-
为了更好地衡量,请确保您的 PHP 脚本配置为使用 UTF-8。如果 PHP 正在执行即时字符转换,因为它认为文件需要使用另一个 ISO 字符表,这可能解释了您所看到的情况。
ini_set('default_charset', 'UTF-8');
标签: php mysql character-encoding mojibake