我已经阅读了关于这种情况的大部分问题和答案,但我无法解决我的角色问题。我的数据库的默认字符集是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
}
如果你能提供帮助,我们会很高兴
此致
答案 0 :(得分:1)
对于那些有相同错误的人,即使你确定@zerkms提到的东西:
“你需要使用相同的编码:1)页面/表格2)表格和列(如果有的话)字符集(不是整理)3)数据库连接。就是这样。如果你有3个相同的话utf-8 - 然后它应该工作。如果没有 - 你错过了什么,需要重新检查每一个“
如果您仍然像我一样遇到问题,请检查您的表单流程数据,如果您忘记了过滤器。我有一个安全过滤器,它是消毒输入,它只用于ansi编码,所以检查一切,而不是它会没事。
感谢所有回复的人。答案 1 :(得分:0)
:) 某处,有些东西没有使用utf8。 PHPMyAdmin以这类问题而闻名,但我无法帮助你,因为我更喜欢命令行或脚本来使用数据库。如果输出在所有地方都很好,除了phpMyadmin我可以推荐你this post,它提供了很多关于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。
希望这会有所帮助,祝你好运。
答案 2 :(得分:0)
您可以将连接对象的字符集设置为utf-8,这样很好,数据库中的其他设置也不会产生任何影响。
我会检查您的页面(插入的页面和显示的页面)是否都已正确编码。有两件事要检查:检查您的页面是否存储了UTF-8编码(没有BOM),这是编辑器/ ide的工作。然后检查您是否正确地声明了它:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
当然,如果您已经从错误的编码页面向数据库插入了数据,则数据库中的数据无效,无法在正确编码的页面上正确显示。