PHP 对来自 Aurora MySQL 的 JSON 编码数据失败

PHP fails on JSON encoding data from Aurora MySQL

我最近将应用程序从 MySQL 迁移到了 Amazon Aurora MySQL 服务。我的应用程序从该数据库中获取数据并使用它来搜索 Elasticsearch 索引之一。

PHP Elasticsearch 库的底层 HTTP 客户端在发送到 Elasticsearch 服务器之前将查询数据编码为 JSON。我发现在传递从数据库检索的数据时,有时 json_encode 调用会失败并且 returns 为 false。这是随机发生的,所以我找不到确切的原因。

我的发现如下:

  1. 从数据库中检索的数据有时包含二进制字符串,并且 json_encode 将此数据传递给它时会失败。
  2. 我们在数据库级别使用 UTF8 编码,因此这不是问题。

Screenshot of database response

这里有人遇到过与 Aurora 或 MySQL 数据库类似的问题,还是只是 PHP 本身的问题?

在使用 php 和 mysql 时永远不要假设任何事情......8/10 你在想什么不是问题......是问题......

所以,试试这个:

强制编码

function array_utf8_encode($dat){
        if (is_string($dat))
            return utf8_encode($dat);
        if (!is_array($dat))
            return $dat;
        $ret = array();
        foreach ($dat as $i => $d)
            $ret[$i] = self::array_utf8_encode($d);
        return $ret;
 }

$my_db_arr = array_utf8_encode($my_db_arr);

// Now let's encode
$json = json_encode($my_db_arr);

注意 函数 array_utf8_encode 不是我的...但老实说我不记得我在 Whosebug 上找到它的地方...否则我会把link 和相关学分...

有没有错误?

var_dump(json_last_error_msg());

json_last_error_msg()

祝你有美好的一天,

安东尼奥

看起来这是 AWS Aurora 本身的问题。另一个人也遇到了类似的问题,AWS 支持团队告诉他现在已经在全球范围内解决了这个问题。

Link to reddit comment.