Re: Data corruption with BYTEA and SQL_ASCII encoding
| От | Barry Lind | 
|---|---|
| Тема | Re: Data corruption with BYTEA and SQL_ASCII encoding | 
| Дата | |
| Msg-id | 3C3783E1.8010502@xythos.com обсуждение исходный текст | 
| Ответ на | Data corruption with BYTEA and SQL_ASCII encoding (Marcus Better <marcus@dactylis.com>) | 
| Список | pgsql-jdbc | 
I have just committed a fix for this bug.  I have also built new jar
files and placed them up on the jdbc.postgresql.org website.
thanks,
--Barry
Marcus Better wrote:
> Hi,
>
> I am using PostgreSQL 7.1.3 with the latest (7.2) development JDBC
> driver.  My tables contain binary data in BYTEA columns.  I get
> strange errors when I read the data using getBytes() if my database
> has SQL_ASCII default encoding.
>
> The data I get has the correct length, but some characters (I believe
> 0xa0 and higher) are replaced with 0xfd characters.
>
> I traced the problem to the getBytes method in
> org/postgresql/jdbc2/ResultSet.java in the JDBC driver:
>
>   //Version 7.2 supports the bytea datatype for byte arrays
>   if (fields[columnIndex - 1].getPGType().equals("bytea"))
>   {
>       return PGbytea.toBytes(getString(columnIndex));
>   }
>
>
> I checked the actual contents of the column that is returned from the
> database, and it is a string which contains non-ascii characters, like
> this:
>
>    \012¿_Ãeo7\223\2316#Ph©\021ê\217\212åI\217k·h:"\230ÜÔ\034ÅW
>
> This string agrees with the contents of the database.  I also checked
> that PGbytea.toBytes() translates this string correctly.  So this
> leaves the call to getString().
>
> getString() tries to decode the string using the specified default
> encoding of the database (SQL_ASCII), and this indeed gives the
> erroneous results.
>
> It seems strange that the string that is returned from the database is
> not in ASCII at all.  This is the root of the problem.
>
> Changing the encoding of the database to LATIN1 solves the problem.
>
> Does this mean that I should not use SQL_ASCII databases with binary
> data?  Can anyone tell me if there is a better solutions, or if I'm
> doing something wrong here?
>
> Thanks,
>
> Marcus
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
>
		
	В списке pgsql-jdbc по дате отправления: