我创建了此函数以将数据插入数据库:
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
据我所知,当我们将空值添加到表中时会出现这个问题,但我没有。
2条答案
按热度按时间p1iqtdky1#
应该是的
const char *data[2]
,函数调用应具有data
而不是data[2]
.错误消息表示postgresql遇到的字节不是正确编码的utf-8字符串的一部分。
kxe2p93d2#
根据文献记载
PQExecParams
应该是const char * const *paramValues
... 所以指向常量的指针指向常量的指针char
. 文档指定它应该指向指定长度(在第三个参数中)的数组(这里是2)。data[2]
是第三个元素data
数组(哎呀,它只有两个元素!)。data
将衰减为指向第一个元素的指针;这是一个指向两个指针组成的数组的指针,每个指针指向一个字符串。正是你需要的。