Обсуждение: Problem with bytea

Поиск
Список
Период
Сортировка

Problem with bytea

От
Daniel Carlsson
Дата:
Hi

When a fetch binary data from a bytea column the data gets messed up.

Se the attached code, postgresql returns 13744 bytes when it should be only 10000. After studing the output I saw that
bytesrepresenting common characters are fetched ok but bytes representing unusual characters such as special swedish
charactersare messed up. Is the binary data somewhere treated as character data? Could something else be the problem? 

I use RedHat 8.0, Postgresql 7.3.2 and jdbc driver pg73jdbc3.jar released 26:th of may.

Code:

    Connection c = DriverManager.getConnection(jdbc);
    Statement s = c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
    ResultSet r;

    byte b[] = new byte[10000];

    for(int i=0;i<b.length;i++)
        b[i] = (byte)(i%256);

    /* Update bytea with 10000 bytes */
    s.executeUpdate("update document set file_=null where documentid=12");
    r = s.executeQuery("select file_,documentid from document where documentid=17");
    r.next();
    r.updateBytes(1,b);
    r.updateRow();

    /* Fetch the bytea value */
    r = s.executeQuery("select file_,documentid from document where documentid=17");
    r.next();
    b = r.getBytes(1);

    /* This outputs 13744 !?!? */
    System.out.println("Length: " + b.length);



Med vänliga hälsningar

Daniel Carlsson
Gimlisoft AB
Email: daniel.carlsson@gimlisoft.se
Tel: 0709-744570, 031-189024


Re: Problem with bytea

От
Joe Conway
Дата:
Daniel Carlsson wrote:
> When a fetch binary data from a bytea column the data gets messed up.
>
> Se the attached code, postgresql returns 13744 bytes when it should
> be only 10000. After studing the output I saw that bytes representing
> common characters are fetched ok but bytes representing unusual
> characters such as special swedish characters are messed up. Is the
> binary data somewhere treated as character data?

Yes, for output all "non-printable" characters are octal escaped. See:
http://www.us.postgresql.org/postgresql-7.3.3/datatype-binary.html

Joe