我的脚本肯定是以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语言输出,就会显示�。
我的问题是,这种差异是从哪里产生的,有没有可能让我的网页和数据库工具都完美地工作?
发布于 2010-07-02 08:29:46
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'"));发布于 2010-07-02 08:42:30
只需简单地将chars转换为用于超级修复的html实体chars(但您可能会遇到其他特殊字符的问题)
问题的另一面(更具体地说)是检查mysql character_set_server和最常见的原因character_set_client - seeAlso:connection charsets
此外,重要的是要注意,元等价没有区别,您需要始终设置头部(‘Content-Type:...)
发布于 2010-07-02 12:22:12
由于您的HTML页面是正确的,因此您似乎在数据库中存储了正确的数据。
€是被误解为windows-1252的欧元符号的UTF8编码。您的Windows工具似乎使用"ANSI“编码,而不是数据库编码。
https://stackoverflow.com/questions/3162382
复制相似问题