如何处理 libpq 中的 UTF-8 编码错误?

How handle UTF-8 encoding error in libpq?

我创建了这个函数来将数据插入数据库:

void add_data_to_db(){
        const char *data[2][2] = {"2","e"};
        re = PQexecParams(connection,
                        "INSERT INTO test_table "\
                        "VALUES (, );",
                        2,NULL,data[2],NULL,NULL,0);
        if(PQresultStatus(re) != PGRES_TUPLES_OK){
                printf("%s\n", PQresultErrorMessage(re));
        }

        PQclear(re);
}

但是当我 运行 它打印的程序时:

ERROR:  invalid byte sequence for encoding "UTF8": 0x80

据我所知,当我们向 table 添加空值时会出现此问题,但我没有。

根据documentation the fifth argument of PQExecParams should be const char * const *paramValues ... so a pointer to constant pointers which point to constant char。文档指定它应指向指定(在第三个参数中)长度(此处为 2)的数组。

data[2]data 数组的第三个元素(糟糕,它只有两个元素!)。

data 会衰减到指向第一个元素的指针;这是一个指向两个指针数组的指针,每个指针指向一个字符串。正是您所需要的。

应该是const char *data[2],函数调用应该是data而不是data[2]

该错误消息表示 PostgreSQL 遇到了不属于正确编码的 UTF-8 字符串的字节。