Сбой PHP на данных JSON-кодирования из Aurora MySQL

0

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

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

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

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

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

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

  • 0
    Итак, вы говорите, что столбец базы данных, который должен содержать строку JSON, иногда содержит двоичные данные, верно?
  • 0
    Я бы начал с проверки базы данных. Появились ли эти двоичные данные при переносе базы данных, или в вашем коде есть Opps, в котором хранятся двоичные данные
Показать ещё 5 комментариев
Теги:
elasticsearch
amazon-rds-aurora

1 ответ

0

Никогда не предполагайте, что когда-либо использовать 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 encode
$json = json_encode($my_db_arr);

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

var_dump(json_last_error_msg());

json_last_error_msg()

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

Антонио

  • 0
    Проблема в том, что не всегда не удается кодировать данные. В большинстве случаев он успешно кодируется в JSON. Это происходит только через случайные интервалы.
  • 0
    затем попытайтесь выйти из json_last_error_msg, таким образом вы сможете узнать, почему происходит сбой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню