0

我已经阅读了关于这种情况的大部分问题和答案,但我无法解决我的性格问题。我的数据库的默认字符集是 utf8,所有表的排序规则都是 utf8_general_ci。我确定所有设置都是 utf8 和 utf8_general_ci,因为我已经检查了数十亿次。问题是在表单中发布值后,它似乎不像我想要的数据库,而且如果我从 phpmyadmin 编辑数据库,当我获取数据时,它再次没有显示我想要的。

数据库连接有效,我像之前提到的那样编辑了这种情况,但是我的脚本在字符规范方面有问题..

数据库连接代码是:

try {

$db = new PDO("mysql:host={$db_server};dbname={$db_name};charset=utf-8", $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// exc 
}

如果你能提供帮助会很高兴

问候

4

3 回答 3

1

对于那些有同样错误的人,即使你确定@zerkms 提到的事情:

" 你需要使用相同的编码:1) 页面/表单 2) 表和列(如果有)字符集(不是排序规则) 3) 数据库连接。就是这样。如果你有所有 3 个相同的 utf-8 - 那么它应该可以工作。如果没有 - 你错过了一些东西,需要重新检查它们中的每一个“

如果您仍然像我一样遇到问题,请检查您的表单处理数据是否有您忘记的过滤器。我有一个安全过滤器,它正在清理输入,它仅用于 ansi 编码,所以检查所有内容,然后就可以了。

感谢所有回复的人。

于 2012-09-03T07:40:18.913 回答
0

:)在你的工具链的某个地方,有些东西没有使用 utf8。PHPMyAdmin 以此类问题而闻名,但我无法为您提供太多帮助,因为我更喜欢命令行或脚本来处理数据库。如果除了 phpMyadmin 之外的所有地方的输出都很好,我可以向您推荐这篇文章,它提供了很多与 phpmyadmin 相关的提示。

哦,您可以在对 PDO 的实例化调用中指定 utf-8 编码:

$con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

在设置 Mysql 时,你可以做的最基本的有用的事情就是将它添加到你的/etc/my.cnf文件中:

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8

编辑也可以对你耍花招。一些编辑器在配置不正确的情况下可以切换并重新保存为不正确的编码,导致在 utf-8 中重新打开时出现乱码。所有体面的 IDE 和编辑器都可以配置为处理 UTF-8。

希望这有帮助,祝你好运。

于 2012-09-03T05:58:00.580 回答
0

您将连接对象的字符集设置为 utf-8,这很好,数据库中的其他设置应该不会有任何影响。

我会检查您的页面(插入的页面和显示的页面)是否都正确编码。有两件事要检查:检查您的页面是否存储为 UTF-8 编码(没有 BOM),这是您的编辑器/ide 的工作。然后检查您是否使用以下内容正确声明了它:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

当然,如果您已经从错误的编码页面将数据插入数据库,则数据库中的数据无效并且无法在正确编码的页面上正确显示。

于 2012-09-03T07:20:25.127 回答