Команда SQL в pg sql через PQexe c не выполняется для специальных символов, таких как m³ или µ - PullRequest
0 голосов
/ 15 марта 2020
void UpdateRecords(PGconn *conn, std::string &records)
{
    if(!records.empty())
    {
         std::string sql;
         sql.append("INSERT INTO data.record VALUES ");
         sql.append(records);

         PGresult *res = PQexec(conn, sql.c_str());
    }
}

Здесь записи содержат данные, разделенные запятой для каждого столбца. Если в строке sql имеется какой-либо специальный символ, например µ или , запись не обновляется в базе данных (запрос не выполняется).

Сообщение об ошибке ERROR: invalid byte sequence for encoding "UTF8": 0xb5 Версия базы данных 9.6.12 Кодировка базы данных: UTF8

1 Ответ

1 голос
/ 15 марта 2020

База данных ожидает, что вы отправите utf8, но вы отправляете что-то еще. Возможно, с расширением LATIN1.

Вы можете это исправить, выполнив сначала set client_encoding to latin1 для вашего соединения, чтобы база данных знала, какую кодировку вы ему отправляете.

Вы также можете изменить records так что они действительно содержат символы UTF8, но это кажется сложнее. Или, по крайней мере, я не знаю, как заставить C ++ делать это на макушке.

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