我的脚本肯定保存在UTF-8中。我正在实例化PDO "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8". 。我的桌子使用InnoDB,并使用UTF8_General_Ci进行整理。我的页面发送给 Content-Type: text/html; charset=UTF-8 标题或 <meta> 相等的。

当使用PDO存储源自HTTP输入或源代码中字符串字符串的€字符时,我随身携带 c3 a2 e2 80 9a c2 ac 根据MySQL Workbench 5.2。从数据库中检索它并在页面上显示它的工作正常。然而,在phpmyadmin和Workbench中,我看到了 €.

当使用这两个工具存储€时,我留下了 e2 82 ac, ,这显然是正确的UTF-8表示形式,但是如果我尝试检索然后使用PHP输出,则会显示。

我的问题是,从哪里出现这种差异,是否有可能使我的网页和数据库工具都完美地工作?

有帮助吗?

解决方案

DSN中的Charset指令实际上适用于MSSQL。我只需要执行 SET NAMES. 。对于那个很抱歉。

我这样就实现了:

parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                    $this->user, $this->password,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));

其他提示

简而言之,将€转换为SuperFix的HTML实体€(但您可能会与其他特殊字符遇到问题)

问题的另一面(更具体地说)是检查MySQL targin_set_server 最常见的原因 targin_set_client - 也可以看看: 连接charset

另外,重要的是要注意,元等等没有区别,您需要 总是 设置标题('content-type:...)

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

€ 是欧元标志的UTF-8编码被误解为Windows-1252。看来您的Windows工具使用“ ANSI”编码而不是数据库编码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top