> Laurent Schweizer <laurent(dot)schweizer(at)peoplefone(dot)com> wrote:
>
> > I have an issue with special character like é.
>
> > I have as server postgres 9.2, I have created a new DB , encoding
> > utf8
> >
> > Client is a very simple test class that:
> > 1) update a varchar value
> > 2) read the same value and print them
> >
> > If I update the varchar with a special character like “é” the
> > value in the DB is correct ( I check them with another software )
> > but when I read them from my simple java class the value is not
> > correct and the é is converted in é
> >
> > I have added to the connection string the option:
> > ?useUnicode=true&characterEncoding=utf8
> >
> > And if I do a : "SHOW client_encoding;” I get UTF8
>
> It is behaving as though the client is using a character encoding
> other than UTF8 -- some sort of 8-bit encoding, probably. You must
> set client_encoding to match.
>
> -Kevin
Hello Laruent,
I have tested the following method with the URL parameters you indicated
with PostgreSQL 9.0.1 and the latest driver. Both on a linux and windows
systems with the same result of the A and the Acute Latin e properly
displaying in a system.out and the frame. I suppose it could be modified
slightly to also check and update rather than an insert.
danap.
private void testInsertUTF(Connection con)
{
// Method Instances
String sqlStatementString;
Statement sqlStatement;
PreparedStatement pstmt;
ResultSet rs;
try
{
sqlStatement = con.createStatement();
con.setAutoCommit(false);
sqlStatementString = "DROP TABLE IF EXISTS jdbc_demo";
sqlStatement.execute(sqlStatementString);
sqlStatementString = "Create Table jdbc_demo (col VARCHAR(30))";
sqlStatement.execute(sqlStatementString);
pstmt = con.prepareStatement("INSERT INTO jdbc_demo VALUES (?), (?)");
pstmt.setString(1, "\u0041"); // A
pstmt.setString(2, "\u00E9"); // Acute Latin e
pstmt.execute();
sqlStatementString = "SELECT * FROM jdbc_demo";
sqlStatement.execute(sqlStatementString);
rs = sqlStatement.executeQuery(sqlStatementString);
JPanel panel = new JPanel();
while (rs.next())
{
String dataString = rs.getString("col");
System.out.println("col:" + dataString);
panel.add(new JLabel(dataString));
}
rs.close();
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.setSize(200, 200);
frame.setVisible(true);
sqlStatementString = "DROP TABLE IF EXISTS jdbc_demo";
sqlStatement.execute(sqlStatementString);
sqlStatement.close();
pstmt.close();
con.setAutoCommit(true);
}
catch (SQLException sqle)
{
System.out.println("SQL Exeception" + sqle);
}
}