So, here is the code which create the table in an Oracle 10g / UTF-8 database :
CREATE TABLE TEST_SEMANTIC
(
SEMANTIC_COLBYTE char(2 byte) ,
SEMANTIC_COLCHAR char(2 char)
);
meaning, that I use two differents types of semantic for the two columns, byte and char.
I then insert inside the database these corresponding data :
insert into test_semantic(SEMANTIC_COLBYTE,SEMANTIC_COLCHAR)
values('é','é');
So when I use the JDBC driver to query the database in a java program, and display the result, I expect an output like this :
Byte>é<
Char>é<
Whereas I get this :
Byte>é<
Char>é <
When I query the database like this :
select dump(semantic_colbyte,16),dump(semantic_colchar,16) from test_semantic;
I get this :
Typ=96 Len=2: c3,a9 Typ=96 Len=3: c3,a9,20
Here is the java code :
public static void main(String[] args){
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
try {
Properties props = new Properties();
props.put("user", "XXX");
props.put("password", "XXX");
con = DriverManager.getConnection("jdbc:oracle:thin:@xxx:1521:xxx", props);
Statement stmt = (Statement) con.createStatement();
stmt.execute("SELECT SEMANTIC_COLBYTE,SEMANTIC_COLCHAR FROM TEST_SEMANTIC");
ResultSet result = stmt.getResultSet();
result.next();
String output_byte = result.getString(1);
String output_char = result.getString(2);
System.out.println("Byte>"+output_byte+"<");
System.out.println("Char>"+output_char+"<");
} catch (SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
}
Don’t forget to
trimyour values while usingchar. Or don’t usechar, usevarchar2, until you are providing the exact sized value as the column size.You might want to know why, so here it is.