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

标签 sql c database postgresql libpq

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

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

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

最佳答案

根据documentation PQExecParams 的第五个参数应该是 const char * const *paramValues ...所以 pointer to constant pointers which point to constant char 。文档指定它应该指向指定(在第三个参数中)长度的数组(此处为 2)。

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

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

关于sql - 如何处理 libpq 中的 UTF-8 编码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685111/

相关文章:

MySql 5.5.40 存储过程@@Identity

PHP mySQL 代码没有发布到数据库?

sql - Sql中的Callable statement和Prepared Statement有什么区别?

mysql - MYSQL更新table2时,使用table2中的值更新table1

php - 按 bool 值排序

c - 消息类型与发送的消息类型不同 - msgsnd/msgrcv C

java - 如何从数组中选择项目(IN 子句详细信息)?

c - 汇编中的内存移动

c++ - 交叉 g++ 编译器链接器错误

mysql - MySQL数据库上的逗号分隔列表