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

在西方字符集的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数据库间交换数据的解决方法.pdf

    本文首先介绍了Oracle数据库在医院信息系统中的应用现状,然后讨论了字符集不同的Oracle数据库间交换数据的困难,以及解决方法的介绍。 关键词:Oracle数据库、HIS、字符集、医保、数据交换 I. 问题描述 Oracle...

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

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

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

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

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK

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

    Oracle数据库升迁时字符集问题的解决.pdf

    在 Oracle 数据库升迁过程中, 字符集问题最主要的原因是 Oracle 数据库系统升迁时的字符集转换问题。为了解决这个问题,需要了解 Oracle 数据库系统升迁过程中的字符集转换问题,并掌握 Export 和 Import 命令的...

    修改Oracle数据库字符集的方法

    在使用Oracle数据库的过程中,可能会遇到需要更改数据库字符集的情况。这通常发生在原有字符集不能满足新的业务需求时,例如需要支持更多的语言或特殊字符。Oracle数据库提供了命令行工具来完成这一任务。本文将详细...

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

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

    如何修改oracle数据库字符集

    修改oracle数据库字符集详细的操作命令

    Oracle 字符集详解

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

    java连接oracle数据库jar包ojdbc8

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

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

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

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

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

    Oracle字符集专题

    "Oracle字符集(2).txt"可能涉及字符集的兼容性问题和解决方案,如如何检查数据库的字符集信息,如何确保新创建的表空间、用户和对象使用指定的字符集,以及如何在不同字符集的数据库之间迁移数据。 "Oracle字符集...

    理解ORACLE数据库字符集

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

    Jdbc连接oracle远程数据库中文乱码解决

    在Java应用中,数据在JVM(Java虚拟机)内部是以Unicode编码存储的,而Oracle数据库可能采用不同的字符集,如GBK或UTF-8等。因此,当数据在两者之间传输时,如果没有正确设置编码转换,就可能出现乱码。 1. **配置...

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

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

    oracle 字符集修改命令

    在Oracle数据库的管理与维护过程中,字符集的正确设置对于确保数据的正确显示与处理至关重要。由于不同的地区和语言环境对于字符编码的需求各异,因此有时可能需要更改Oracle数据库的字符集设置。本文将详细介绍如何...

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

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

Global site tag (gtag.js) - Google Analytics