我试图插入一些整数到Postgres表中使用以下几个简单的代码。PostgreSQL libpq发送整数作为二进制时出现“整数超出范围”错误
#include <libpq-fe.h>
#include <stdio.h>
#include <stdint.h>
int main() {
int64_t i = 0;
PGconn * connection = PQconnectdb("dbname='babyfood'");
if(!connection || PQstatus(connection) != CONNECTION_OK)
return 1;
printf("Number: ");
scanf("%d", &i);
char * params[1];
int param_lengths[1];
int param_formats[1];
param_lengths[0] = sizeof(i);
param_formats[0] = 1;
params[0] = (char*)&i;
PGresult * res = PQexecParams(connection,
"INSERT INTO intlist VALUES ($1::int8)",
1,
NULL,
params,
param_lengths,
param_formats,
0);
printf("%s\n", PQresultErrorMessage(res));
PQclear(res);
PQfinish(connection);
return 0;
}
我得到如下结果:
Number:55 ERROR: integer out of range
Number:1 ERROR: integer out of range
我敢肯定的int64_t总会适合在任何理智的平台的8字节整数。我究竟做错了什么?
它应该能够从:: int8转换中确定。此外,这绝对是一个endian问题,因为翻转endian不仅会摆脱错误,而且实际上会导致正确的插入。 – Edward 2009-08-19 21:01:44
啊,我明白了。我应该想到这一点:) – 2009-08-20 08:38:02