【问题标题】:utf8, utf8mb4, utf8_general_ci trouble on PDO retrieving datautf8、utf8mb4、utf8_general_ci PDO 检索数据时出现问题
【发布时间】:2015-01-16 11:46:50
【问题描述】:

我有一个存储在服务器上的数据库

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));

但我什至尝试过作为选项 "设置名称 utf8"

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

            $originalEncoding = mb_detect_encoding($fieldWithProbs); 

回到我身边

ASCII

然后如果我尝试使用以下命令对其进行转换:

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

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

【问题讨论】:

    标签: php mysql pdo utf-8


    【解决方案1】:

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

    所以完全没有问题,只是有点不理解。

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

    【讨论】:

    • 好吧,我的小知识似乎让我走错了路。但我的问题是,如果我尝试 $var=$fieldWithProb 它会给我一个 NULL
    • 两件事:mb_convert_encoding() 需要三个参数,这可能是罪魁祸首。此外,如果 ( $var = $field ) 产生 null,则两者之一为 null。您必须使用 var_dump 来缩小问题范围。
    • 第三个参数是可选的 string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] ) 在询问之前我已经做了几个 var_dump被严重转换为 null
    • 您应该向您展示相关代码。它可能会有所帮助。您提供的信息涉及太多猜测。
    • 我在数据库中有一个字段,其中包含字符串“Melù”-> PDO 生成的关联数组上有“Melù”(通过 var_dump 检查)--> 如果我尝试使用mb_convert_encoding() 字符串 si 转换为“Mel”,如果我不使用它,它简单地为最终变量分配一个空值...
    【解决方案2】:

    我用这个解决了这个问题:

                $row=array_map('utf8_encode', $row);
    

    在执行任何其他操作之前先在​​提取的行上。 我希望它对某些人有所帮助,我为此浪费了很多时间:)

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

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 2023-04-09
      • 2012-07-17
      • 2021-10-29
      • 2017-07-24
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      相关资源
      最近更新 更多