Stephan Szabo wrote:
> On Tue, 4 Apr 2006, Eugene E. wrote:
>
>
>>Stephan Szabo wrote:
>>
>>>On Fri, 31 Mar 2006, Eugene E. wrote:
>>>
>>>
>>>
>>>>Peter Eisentraut wrote:
>>>>
>>>>
>>>>>Eugene E. wrote:
>>>>>
>>>>>
>>>>>
>>>>>>the problem is: you'll get this four byte sequence '\000' _instead_
>>>>>>of NUL-byte anyway.
>>>>>
>>>>>
>>>>>What you seem to be missing is that PostgreSQL data can be represented
>>>>>in textual and in binary form. What you in psql is the textual form.
>>>>>If you want the binary form you need to select it. Then you can pass
>>>>>the exact bytes back and forth.
>>>>
>>>>your sentence is not true.
>>>>I can not select exact bytes even if i use BYTEA type
>>>
>>>
>>>No, that is still using the textual form. If you use PQexecParams and set
>>>the last argument to show you want binary data, you should get binary
>>>data.
ok
then i am using PQexecParams
the following tiny program shows a wonderful lameness...
#include <stdlib.h>
#include <stdio.h>
#include "libpq-fe.h"
int
main (void) { PGconn * conn; PGresult * res; char * val; char * l; int len;
conn = PQconnectdb("user=scott password=tiger name=test_db");
PQexec(conn, "CREATE TABLE t (a BYTEA)"); PQexec(conn, "INSERT INTO t VALUES ('ab\\\\000cd')");
res = PQexecParams(conn, "SELECT a,length(a) FROM t", 0, NULL, NULL,
NULL, NULL, 1); val = PQgetvalue(res,0,0); l = PQgetvalue(res,0,1); len = PQgetlength(res,0,0);
printf("what_we_retrive='screened'its_value_length=%i but
orig_length=%s\n",len,l);
PQclear(res); PQfinish(conn);
return 0; }