首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符编码不匹配

字符编码不匹配
EN

Stack Overflow用户
提问于 2010-07-02 07:28:51
回答 3查看 1.3K关注 0票数 1

我的脚本肯定是以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和工作台中,我看到了€

在使用这两个工具存储欧元时,我使用的是e2 82 ac,这显然是正确的UTF8表示,但是如果我尝试检索它,然后用PHP语言输出,就会显示�。

我的问题是,这种差异是从哪里产生的,有没有可能让我的网页和数据库工具都完美地工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-02 08:29:46

DSN中的charset指令实际上适用于MSSQL。我只需要执行SET NAMES。真对不起。

我是这样实现的:

代码语言:javascript
复制
parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                    $this->user, $this->password,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
票数 1
EN

Stack Overflow用户

发布于 2010-07-02 08:42:30

只需简单地将chars转换为用于超级修复的html实体chars(但您可能会遇到其他特殊字符的问题)

问题的另一面(更具体地说)是检查mysql character_set_server和最常见的原因character_set_client - seeAlso:connection charsets

此外,重要的是要注意,元等价没有区别,您需要始终设置头部(‘Content-Type:...)

票数 0
EN

Stack Overflow用户

发布于 2010-07-02 12:22:12

由于您的HTML页面是正确的,因此您似乎在数据库中存储了正确的数据。

€是被误解为windows-1252的欧元符号的UTF8编码。您的Windows工具似乎使用"ANSI“编码,而不是数据库编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3162382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档