`
aaronchenwei
  • 浏览: 8238 次
文章分类
社区版块
存档分类
最新评论

在西方字符集的Oracle数据库上用Java操作UTF8数据

阅读更多
虽然Oracle推荐建立一个新的Oracle instance的时候最好选用AL32UTF8作为默认的字符集,这样可以更好的来支持国际化的各种语言字符集的数据。可是还是由于各种各样的历史原因,有一些Oralce数据库的instance还是用的默认的西方字符集。在这样的数据库下面,对于UTF8数据的更新,要进行一些额外的操作。

本文测试所用的Oracle数据库的NLS信息如下
  • NLS_LANGUAGE                  
    AMERICAN
  • NLS_CHARACTERSET              
    WE8ISO8859P1
  • NLS_NCHAR_CHARACTERSET        
    UTF8


数据库的表字段选用了NVARCHAR2。

CREATE TABLE UTF8TEST (
  LABEL  NVARCHAR2(128)
);



使用的Oracle客户端是Oracle SQL Developer,这个是Oracle自家出的基于Java的客户端,默认对于多语言的select操作支持比较好,可以直接选出UTF8的数据。但是如果insert或是update的话,还是产生了乱码数据。

INSERT INTO UTF8TEST VALUES ('中文测试');

SELECT * FROM UTF8TEST;


------

LABEL                                                                                                                          
-------
¿¿¿¿  


如果用java/groovy程序,也会产生同样的乱码。用的JDBC Driver是ojdbc14.jar
def db = [
  url:'jdbc:oracle:thin:@XXX',
  user:'XXX',
  password:'XXX',
  driver:'oracle.jdbc.driver.OracleDriver']

def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)

sql.execute("INSERT INTO UTF8TEST VALUES ('中文测试')")

sql.close()


解决的方案,在运行程序的时候加入JVM的参数
-Doracle.jdbc.defaultNChar=true -Doracle.jdbc.convertNcharLiterals=true


Oracle的文档中有如下的说法:
引用

By default, the oracle.jdbc.OraclePreparedStatement interface treats the data type of all the columns in the same way as they are encoded in the database character set. However, since Oracle Database 10g, if you set the value of oracle.jdbc.defaultNChar system property to true, then JDBC treats all character columns as being national-language.


意思是说默认的话,程序jdbc用的是char的映射,只有当设置了JVM System property后,可以默认映射成NCHAR, NVARCHAR, NCLOB。

oracle.jdbc.convertNcharLiterals这个配置可以,用这如下的方法来操作
INSERT INTO UTF8TEST VALUES (N'中文测试');


分享到:
评论

相关推荐

    oracle数据库字符集 无法修改数据库字符集 乱码

    在Oracle数据库管理中,字符集的设置至关重要,它直接影响到数据的存储、检索以及与之交互的准确性。本文将深入探讨Oracle数据库字符集的概念、重要性、修改过程及其潜在问题,特别是当尝试修改数据库字符集时遇到的...

    Oracle数据库字符集问题解析.pdf

    本文还介绍了 Oracle 数据库字符集问题的解决方法,包括使用 exp/imp 工具来转换数据库字符集,使用 Unicode 字符集来存储数据等。 Oracle 数据库字符集问题解析对 Oracle 数据库管理系统的应用和发展产生了深远的...

    java连接AmericanascII7字符集oracle例子

    在Java开发中,连接Oracle数据库是一项常见的任务,尤其是在处理特定字符集如American ASCII7时,开发者需要对字符编码有深入的理解。Oracle数据库支持多种字符集,包括ASCII,它是最基础的7位字符集,包含32个控制...

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK

    在Oracle11g环境下,可能会遇到需要更改数据库字符集的情况,例如从AL32UTF8修改为ZHS16GBK。这种变更通常发生在需要支持特定语言环境的应用场景中,尤其是当应用主要面向中文用户时,采用ZHS16GBK字符集可以更好地...

    oracle数据库的字符集

    在Oracle数据库中,字符集是一个非常关键的概念,它直接关系到数据的正确存储和显示。字符集在创建数据库时被指定,并且在创建后通常不能更改。因此,选择一个正确的字符集至关重要。 #### 二、字符集的发展历史 ...

    oracle英文字符集插入到中文字符集

    "Oracle英文字符集插入到中文字符集"的主题聚焦于如何在不同字符集之间进行有效转换,以便在不修改客户端环境变量的情况下,实现数据的正确存储和检索。 Oracle数据库系统支持多种字符集,字符集决定了数据库如何...

    jdbc连接oracle字符集不同出现乱码

    当使用 JDBC 从远程 Oracle 数据库提取数据时,如果远程数据库使用的是 `US7ASCII` 字符集,而本地应用期望的数据字符集为 `ZHS16GBK`,则在读取过程中会因字符集转换错误而导致乱码。这是因为 Java 在处理字符串时...

    Oracle 字符集详解

    Oracle字符集是数据库管理系统Oracle中的一个重要概念,它决定了数据库如何存储和处理文本数据。字符集不仅影响着数据的准确性和一致性,还与全球化应用、数据迁移和数据交换密切相关。本篇将深入探讨Oracle字符集的...

    java连接oracle数据库jar包ojdbc8

    总结来说,ojdbc8.jar是Java连接Oracle数据库的关键组件,配合正确的配置和使用,可以实现高效、稳定的数据库操作。同时,考虑到字符集支持,`orai18n.jar`也可能成为项目中的重要部分,特别是处理多语言数据时。...

    java导出oracle数据(单表)

    在本资源中,我们将讨论如何使用 Java 语言导出 Oracle 数据库中的单表数据。该资源提供了一个完整的示例代码,展示了如何使用 Java 语言连接 Oracle 数据库,执行导出操作,并处理可能出现的错误。 知识点 1:Java...

    Oracle 数据库多语言入库问题的解决方案

    Oracle 数据库多语言入库问题的解决方案是针对企业在国际化进程中遇到的多国语言信息存储难题,尤其是在使用Oracle数据库时,由于字符集的不兼容性导致非中文语言数据入库时出现乱码。Oracle数据库作为全球广泛使用...

    浅析Oracle数据库字符集问题.pdf

    然而,在使用Oracle数据库时,字符集的配置至关重要,因为它直接影响到数据的存储、显示和处理。若配置不当,可能会导致数据乱码,尤其是在涉及多语言环境的数据操作时。 1. 什么是字符集 字符集是指数据库支持的...

    理解ORACLE数据库字符集

    定长多字节编码(如AF16UTF16)的每个字符用固定数量的字节表示。 - Unicode编码:Unicode是一种包含全球所有已知字符的编码方案,提供唯一编码。UTF-16(如AF16UTF16)是16位的Unicode编码,UTF-8(如AL32UTF8)则...

    ORACLE字符集浅析——异种字符集数据库间的数据存取方法探讨.pdf

    Oracle字符集是数据库管理系统Oracle中的一个关键概念,用于定义数据的编码方式,使得数据库能够存储和处理各种语言的字符。本文主要探讨了在不同字符集的Oracle数据库间如何有效地进行数据存取。Oracle的全球化支持...

    C#版Oracle数据库通用操作类

    在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。该类提供了一系列方法,包括基础连接、...

    修改oracle数据库的字符集方法(RAC)

    在Oracle RAC环境中更改数据库的字符集是一项较为复杂的任务,需要谨慎操作。本文将详细解释如何在Oracle RAC环境下安全地修改数据库字符集,包括必要的步骤和注意事项。 #### 1. 查询当前字符集 在进行任何更改...

    Web下Java语言如何访问不同字符集的Oracle数据.pdf

    第二种情况更复杂,Java Applet通过宿主机建立数据库链接(Database Link)访问另一台使用西文字符集的Oracle数据库时,需要在两个层次上处理字符集问题:一是宿主机Oracle数据库的字符集,二是远程Oracle数据库的...

    oracle汉字转拼音package包-支持UTF8

    在Oracle中处理UTF8编码的数据时,需要确保数据库和客户端的字符集设置正确,以避免乱码问题。在使用汉字转拼音Package时,必须保证数据存储和传输过程中都使用UTF8编码,否则可能会出现转换错误。 该Package包的...

Global site tag (gtag.js) - Google Analytics