Сбой PHP на данных JSON-кодирования из Aurora MySQL - PullRequest
0 голосов
/ 07 февраля 2019

Я недавно перенес приложение из MySQL в сервис Amazon Aurora MySQL.Мое приложение извлекает данные из этой базы данных и использует их для поиска в одном из индексов Elasticsearch.

Базовый HTTP-клиент библиотеки PHP Elasticsearch кодирует данные запроса в JSON перед отправкой на сервер Elasticsearch.Я обнаружил, что иногда вызов json_encode завершается неудачно и возвращает false при передаче данных, извлеченных из базы данных.Это происходит через случайные интервалы, поэтому я не могу найти точную причину.

Мои выводы приведены ниже:

  1. Данные, извлеченные из базы данных, иногда содержат двоичные строки и json_encodeпроисходит сбой при передаче этих данных.
  2. Мы используем кодировку UTF8 на уровне базы данных, поэтому это не может быть проблемой.

Снимок экрана с ответом базы данных

Кто-нибудь здесь сталкивался с подобной проблемой с базой данных Aurora или MySQL, или это просто проблема самого PHP?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Похоже, это была проблема самой AWS Aurora.С подобной проблемой столкнулся другой человек, и служба поддержки AWS сообщила ему, что теперь она устранена глобально.

Ссылка на комментарий Reddit .

0 голосов
/ 07 февраля 2019

Никогда не предполагайте, что когда-либо использовать 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 не моя ... но я, честно говоря, не помню, где я нашел ее здесь на stackOverflow ... в противном случае япоставил бы ссылку и относительные кредиты ...

Есть ли ошибки?

var_dump(json_last_error_msg());

json_last_error_msg ()

Хорошего дня,

Антонио

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...