我正在尝试使用以下代码使用PQputCopyData
插入两列。但是一旦检查到最终结果,就会显示编码UTF8
的错误无效字节序列,并且数据没有插入到数据库中。
两列类型均为character varying
。我在这里做错了什么?
const char *buffer = "john,doe";
PGresult *res;
res=PQexec(conn,"COPY john FROM STDIN DELIMITER ',';");
cout<<buffer;
if(PQresultStatus(res) != PGRES_COPY_IN)
{
cout<<"copy in not ok";
}
else
{
if(PQputCopyData(conn,buffer,400) == 1)
{
if(PQputCopyEnd(conn,NULL) == 1)
{
PGresult *res = PQgetResult(conn);
if(PQresultStatus(res) == PGRES_COMMAND_OK)
{
cout<<"done";
}
else
{
cout<<PQerrorMessage(conn); Here I get the error invalid byte sequence for encoding "UTF8"
}
}
else
{
cout<<PQerrorMessage(conn);
}
}
}
答案 0 :(得分:0)
if(PQputCopyData(conn,buffer,400) == 1)
传递400
而不是buffer
中内容的实际大小是错误的,这使得它在真实数据之后发送未分配的垃圾。请改用strlen(buffer)
。
此外,您希望每一行都以换行符结束,因此buffer
应为:
const char *buffer = "john,doe\n";