在PDO检索数据时出现utf8,utf8mb4,utf8_general_ci问题

时间:2015-01-16 11:46:51

标签: php mysql pdo utf-8

我有一个存储在用

编码的服务器上的数据库
  

utf8_general_ci

我的所有网页都被强制进入

  

UTF8

我与数据库的连接是这样的:

return new PDO('mysql:host=localhost;dbname=XXXX',
            'XXXX', 'XXXX', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
                PDO::MYSQL_ATTR_LOCAL_INFILE => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

但我甚至尝试过选择     “SET NAMES utf8”

当我尝试解析我的结果集时,我总是遇到一些文本字段的问题,如果我尝试命令喜欢:

            $originalEncoding = mb_detect_encoding($fieldWithProbs); 

回到我身边

  

ASCII

然后如果我尝试使用以下命令转换它:

                $newEncodedData = mb_convert_encoding($fieldWithProbs, 'UTF-8');

它似乎不起作用,如果我再次询问编码的类型仍然是ASCII。 奇怪的是,它在本地但不在远程服务器上工作,在db set上具有相同类型的编码。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

ASCII是UTF8的子集。如果将ASCII转换为UTF8,则二进制表示保持不变。

所以没有任何问题,只是有点不理解。

The Minimum Every Software Developer Must Know About Unicode and Character Sets

答案 1 :(得分:-1)

我用这个来解决问题:

            $row=array_map('utf8_encode', $row);
在执行任何其他操作之前,在提取的行上

。  我希望它对某些人有帮助,我在这周围浪费了很多时间:)

问题不在于分配"损坏的文本"使用json_encode(),即使使用选项JSON_UNESCAPED_UNICODE我也没有解决问题。