为什么JDBC驱动程序从Oracle数据库填充其他查询字段的空白字符?

ras*_*ata 4 java database oracle jdbc utf-8

所以,这是在Oracle 10g/UTF-8数据库中创建表的代码:

CREATE TABLE TEST_SEMANTIC
(
SEMANTIC_COLBYTE char(2 byte) ,
SEMANTIC_COLCHAR char(2 char)
);
Run Code Online (Sandbox Code Playgroud)

意思是,我为两列(byte和char)使用了两种不同类型的语义.

然后我在数据库中插入这些相应的数据:

insert into test_semantic(SEMANTIC_COLBYTE,SEMANTIC_COLCHAR)
values('é','é');
Run Code Online (Sandbox Code Playgroud)

所以当我使用JDBC驱动程序在java程序中查询数据库并显示结果时,我希望输出如下:

Byte>é<
Char>é<
Run Code Online (Sandbox Code Playgroud)

虽然我得到了这个:

Byte>é<
Char>é      <
Run Code Online (Sandbox Code Playgroud)

当我像这样查询数据库时:

select dump(semantic_colbyte,16),dump(semantic_colchar,16) from test_semantic;
Run Code Online (Sandbox Code Playgroud)

我明白了:

Typ=96 Len=2: c3,a9 Typ=96 Len=3: c3,a9,20
Run Code Online (Sandbox Code Playgroud)

这是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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ego*_*gov 5

CHAR数据类型:

CHAR数据类型指定固定长度的字符串.Oracle确保存储在CHAR列中的所有值都具有size指定的长度.如果插入的值小于列长度,则Oracle会将值空白填充到列长度.