通过 PQexec 在 pgsql 中的 SQL 命令对于特殊字符(如 m³ 或 μ)失败


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

数据库希望您发送utf8,但您发送的是其他内容。可能LATIN1延长。

您可以通过首先在连接上执行set client_encoding to latin1来解决此问题,这样数据库就知道您要向其发送什么编码

您也可以更改records,使它们实际上包含UTF8字符,但这似乎更难。或者至少,我不知道如何让C++在我的脑海中做到这一点。

最新更新