ORACLE的字符集为US7ASCII,用ORACLE JDBC读的时候会有乱码,请问如何解决?我知道可以用转码方式来解决new String(rs.getString("name").getBytes("ISO8859-1"),"GBK");
但比较烦,有没有其他的更好的方式来解决这个问题?不需转码?数据库ORACLE的字符集不能转换,上面还有其他的应用。

解决方案 »

  1.   

    我用的SQL SERVER 2000 帮不上什么忙罗
    这里有个乱码讨论帖子
    你可以看一下
    http://community.csdn.net/Expert/topic/5004/5004961.xml?temp=.6147882
      

  2.   

    你可以自己写一个setEncodingCharactar,然后在web里配置每次读数据的时候执行转换就是
      

  3.   

    不知道除了操作Oracle还有没有其他的操作应用会影响编码, 给两个方案你参考1. 将编译/运行的编码设置成与Oracle一样的编码. 
      编译.java文件 javac -encoding ISO8859-1 ...
      运行          java -Dfile.encoding=ISO8859-1
      注意: 如果你的应用设计到JSP/文件I/O, 相应的要使用ISO8859-1, 如果大量这样的I/O, 这样的方法不好用.2. 使用自己写的JDBC包装器代替Oracle的ResultSet/Statement...
      原理是在包装器内部实现编码转换, 而应用就不需要每个字段转一次了. 
      注意: 需要包装的东西包括Connection, Statement, CallableStatment, PreparedStatement, ResultSet 如果用到JDBC2.0, 还要包装DataSource. 包装比较简单, 但向下兼容差, 如Jdk1.3 包装后, jdk1.4还要重新包装一次, 比较繁琐.
      

  4.   

    回楼上的,第一种方法试过了,还是乱码,不管用第二种方法太烦,我还要用HIBERNATE之类的持久层就不好办了
      

  5.   

    不知道你做什么应用, 按理说方法一应该可以, 偶都用了好多年了. 由于平台关系, 直接System.out.println测试不出东西来的, 需要用文件I/O看看
      

  6.   

    <% @ page contentType="text/html;charset = gb2132" %>
    在页面中比如
    String name = request.getParemeter("name");
    name = new String(name.getBytes("ISO8859-1","gb2132"));
      

  7.   

    url=jdbc:mysql://localhost:3306/aa?user=root&password=root&useUnicode=true&characterEncoding=GBK试一试在连接的时候直接设置
      

  8.   

    little06(火) ( )ORACLE的JDBC可没有设定字符集的参数
      

  9.   

    在SQL语句上的字段名叫TRIM吧
    如 select trim(emp_name) from emp
      

  10.   

    可以参考一下这个
    CREATE TYPE num_varray AS VARRAY(10) OF VARCHAR2(12) 

    CREATE TABLE varray_table (col1 num_varray); 
    INSERT INTO varray_table VALUES (num_varray('你好', 'abc')); select * from varray_table; */ import java.sql.*; 
    import java.math.*; 
    import oracle.jdbc.driver.*; 
    import oracle.sql.*; class Array1 
    { public static void main(String args[]) throws Exception 

    int oracleId = CharacterSet.ZHS16GBK_CHARSET; 
    CharacterSet dbCharset = CharacterSet.make(oracleId); DriverManager.registerDriver 
    (new oracle.jdbc.driver.OracleDriver()); Connection conn = 
    DriverManager.getConnection 
    ("jdbc:oracle:thin:@10.9.200.58:1521:db01", 
    "mytest", 
    "mytest"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM varray_table"); while (rs.next()) { 
    ARRAY my_array = ((OracleResultSet)rs).getARRAY(1); // return the SQL type names, integer codes, 
    // and lengths of the columns 
    System.out.println ("Array is of type " + my_array.getSQLTypeName()); 
    System.out.println ("Array element is of typecode " + my_array.getBaseType()); 
    System.out.println ("Array is of length " + my_array.length()); // get Array elements 
    String[] values = (String[]) my_array.getArray(); 
    for (int i = 0; i < values.length; i++) 

    oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i], dbCharset); 
    System.out.println(">> index " + i + " = " + out_value); 

    } rs.close(); 
    stmt.close(); 
    conn.close(); 


      

  11.   

    trim是去空格的怎么拿到这来了.
    US7ASCII又见这个字符集,如果是新版本的oracle安装的时候用默认的字符集就可以。这个字符集是一个很小的子集。不要偷懒了就写个转码函数调用吧.你数据库不能改,上面还有别的应用,就只能在中间做文章了,不实际写代码是行不通的
      

  12.   

    方法一:在提交的 form 中设置 enctype="multipart/form-data"  属性
    方法二:String name = request.getParemeter("name"); //取得姓名字段
            name = new String(name.getBytes("ISO8859-1","gbk"));  //转一下码,可以单步看 
            一下是不是中文。另外,方法一和方法二不要同时用,否则会转两次码。。