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

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

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

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

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

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

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

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's encode
$json = json_encode($my_db_arr);

НОТА функция array_utf8_encode не моя … но я, честно говоря, не помню, где я нашел ее здесь на stackOverflow … в противном случае я бы поставил ссылку и относительные кредиты …

var_dump(json_last_error_msg());

json_last_error_msg ()

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

Антонио

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]