如何处理 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 字符串的字节。
我创建了这个函数来将数据插入数据库:
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 字符串的字节。