【发布时间】:2019-07-01 13:34:50
【问题描述】:
我最近将一个应用程序从 MySQL 迁移到了 Amazon Aurora MySQL 服务。我的应用程序从该数据库中获取数据并使用它来搜索 Elasticsearch 索引之一。
PHP Elasticsearch 库的底层 HTTP 客户端将查询数据编码为 JSON,然后发送到 Elasticsearch 服务器。我发现有时json_encode 调用失败并在传递从数据库检索的数据时返回false。这是随机发生的,所以我找不到确切的原因。
我的发现如下:
- 从数据库中检索到的数据有时包含二进制字符串,
json_encode在将这些数据传递给它时会失败。 - 我们在数据库级别使用 UTF8 编码,因此这不是问题。
Screenshot of database response
这里有人遇到过类似的 Aurora 或 MySQL 数据库问题,还是只是 PHP 本身的问题?
【问题讨论】:
-
所以你是说应该包含JSON字符串的数据库列有时包含二进制数据,对吧?
-
我将从检查数据库开始。迁移数据库时是否出现了此二进制数据,或者您的某些代码中是否存在存储二进制数据的 Opps
-
你不能把责任归咎于 PHP 的
json_encode()未能转换它从未设计为转换的数据 -
否,数据库列仅包含搜索文本。然后,我们将 Elasticsearch 查询构建为一个数组,然后将其传递给 PHP Elasticsearch 客户端库。该库的底层实现使用
json_encode对其进行编码,然后再发送到 Elasticsearch 服务器。 -
另外,是的,这些问题是在应用程序迁移到 Aurora MySQL 之后出现的。
标签: php mysql json elasticsearch amazon-aurora