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

6yjfywim  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(397)

我创建了此函数以将数据插入数据库:

void add_data_to_db(){
        const char *data[2][2] = {"2","e"};
        re = PQexecParams(connection,
                        "INSERT INTO test_table "\
                        "VALUES ($1, $2);",
                        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

据我所知,当我们将空值添加到表中时会出现这个问题,但我没有。

p1iqtdky

p1iqtdky1#

应该是的 const char *data[2] ,函数调用应具有 data 而不是 data[2] .
错误消息表示postgresql遇到的字节不是正确编码的utf-8字符串的一部分。

kxe2p93d

kxe2p93d2#

根据文献记载 PQExecParams 应该是 const char * const *paramValues ... 所以指向常量的指针指向常量的指针 char . 文档指定它应该指向指定长度(在第三个参数中)的数组(这里是2)。 data[2] 是第三个元素 data 数组(哎呀,它只有两个元素!)。 data 将衰减为指向第一个元素的指针;这是一个指向两个指针组成的数组的指针,每个指针指向一个字符串。正是你需要的。

相关问题