Итак, вот код, который создает таблицу в базе данных Oracle 10g / UTF-8:
CREATE TABLE TEST_SEMANTIC
(
SEMANTIC_COLBYTE char(2 byte) ,
SEMANTIC_COLCHAR char(2 char)
);
Это означает, что я использую два разных типа семантики для двух столбцов, байта и символа.
Затем я вставляю в базу данных эти соответствующие данные:
insert into test_semantic(SEMANTIC_COLBYTE,SEMANTIC_COLCHAR)
values('é','é');
Поэтому, когда я использую драйвер JDBC для запроса базы данных в java-программе и отображаю результат, я ожидаю такой вывод:
Byte>é<
Char>é<
В то время как я получаю это:
Byte>é<
Char>é <
Когда я запрашиваю базу данных следующим образом:
select dump(semantic_colbyte,16),dump(semantic_colchar,16) from test_semantic;
Я получаю это:
Typ=96 Len=2: c3,a9 Typ=96 Len=3: c3,a9,20
Вот код Java:
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());
}
}