解决Oracle数据库为US-ASCII字符集,中文乱码的问题,不饶弯路

361 阅读1分钟

由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了,  并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。

下面直接上方法

  • 首先在pom文件中直接引入这个版本的Oracle驱动
<!-- oracle 驱动 -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
</dependency>
  • 其次将中文乱码的字段通过getBytes()方法进行转换
        String name = "ÄÐ";
        System.out.println(new String(name.getBytes("ISO8859_1"), "GB2312"));
        System.out.println(new String(name.getBytes("ISO8859-1"), "GB2312"));
        System.out.println(new String(name.getBytes("ISO-8859-1"), "GB2312"));

        System.out.println(new String(name.getBytes("ISO8859_1"), "GBK"));
        System.out.println(new String(name.getBytes("ISO8859-1"), "GBK"));
        System.out.println(new String(name.getBytes("ISO-8859-1"), "GBK"));