Обсуждение: BUG #1594: ResultSet.getBytes() vs db encoding latin1
The following bug has been logged online: Bug reference: 1594 Logged by: Pascal Lambert Email address: pascall@caddy.ca PostgreSQL version: 7.3.9 Operating system: linux Description: ResultSet.getBytes() vs db encoding latin1 Details: The bug is related with the jdbc driver. The getBytes() method of the ResultSet didn't return the correct bytes. It can be reprodure easly with the following with a database using encoding LATIN1. But it work fine when using UNICODE encoding. _________________________________________________________ /** * CREATE DATABASE BUGBYTEA WITH ENCODING='LATIN1'; * CREATE TABLE IMAGES ( IMAGE BYTEA ); */ public class BugBytea { public static void main(String[] args) { try { BugBytea o = new BugBytea(); o.run(); } catch (Exception e) { e.printStackTrace(); } } private void run() throws Exception { Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://caddy_java/bugbytea", "postgres", ""); Statement stmt = con.createStatement(); stmt.executeUpdate("truncate table images"); PreparedStatement pstmt = con.prepareStatement("insert into images values (?)"); byte[] bytes = {-84, -19, 0, 5}; pstmt.setBytes(1, bytes); pstmt.execute(); ResultSet rs = stmt.executeQuery("select image from images"); rs.next(); byte[] result = rs.getBytes(1); System.out.println("bytes="); this.printByte(bytes); System.out.println("result="); this.printByte(result); } private void printByte(byte[] bytes) { for (int i=0; i<bytes.length; i++) { if (i>0) System.out.print(", "); System.out.print(bytes[i]); } System.out.println(""); } }
On Tue, 12 Apr 2005, Pascal Lambert wrote: > > Bug reference: 1594 > Logged by: Pascal Lambert > Email address: pascall@caddy.ca > PostgreSQL version: 7.3.9 > Description: ResultSet.getBytes() vs db encoding latin1 > > The getBytes() method of the ResultSet didn't return the correct bytes. It > can be reprodure easly with the following with a database using encoding > LATIN1. But it work fine when using UNICODE encoding. This is actually a server bug, not a driver bug. The server is trying to do client encoding conversion of binary data, which it shouldn't. Are you sure you are using version 7.3.9? Here I have 7.3.0, 7.3.1, 7.3.2, and 7.3.9. The only one that has that bug is 7.3.2. I don't know when this was fixed, but I have no trouble with 7.3.9. Kris Jurka