虽然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 数据库字符集问题的解决方法,包括使用 exp/imp 工具来转换数据库字符集,使用 Unicode 字符集来存储数据等。 Oracle 数据库字符集问题解析对 Oracle 数据库管理系统的应用和发展产生了深远的...
在Oracle11g环境下,可能会遇到需要更改数据库字符集的情况,例如从AL32UTF8修改为ZHS16GBK。这种变更通常发生在需要支持特定语言环境的应用场景中,尤其是当应用主要面向中文用户时,采用ZHS16GBK字符集可以更好地...
例如,将数据从AL32UTF8导出到一个新的数据库,其字符集为WE8ISO8859P1,可以这样操作: ``` expdp username/password@source_db directory=dir_name dumpfile=data.dmp charset=AL32UTF8 impdp username/...
在Oracle数据库中,字符集是一个非常关键的概念,它直接关系到数据的正确存储和显示。字符集在创建数据库时被指定,并且在创建后通常不能更改。因此,选择一个正确的字符集至关重要。 #### 二、字符集的发展历史 ...
"Oracle英文字符集插入到中文字符集"的主题聚焦于如何在不同字符集之间进行有效转换,以便在不修改客户端环境变量的情况下,实现数据的正确存储和检索。 Oracle数据库系统支持多种字符集,字符集决定了数据库如何...
例如,在中文环境下,如果数据库字符集设置为WE8ISO8859P1,那么在存储中文数据时就会出现问题。本文将详细介绍如何通过Oracle提供的工具进行字符集转换,避免因字符集问题导致的数据丢失或显示异常。 #### 二、...
当使用 JDBC 从远程 Oracle 数据库提取数据时,如果远程数据库使用的是 `US7ASCII` 字符集,而本地应用期望的数据字符集为 `ZHS16GBK`,则在读取过程中会因字符集转换错误而导致乱码。这是因为 Java 在处理字符串时...
修改oracle数据库字符集详细的操作命令
Oracle字符集是数据库管理系统Oracle中的一个重要概念,它决定了数据库如何存储和处理文本数据。字符集不仅影响着数据的准确性和一致性,还与全球化应用、数据迁移和数据交换密切相关。本篇将深入探讨Oracle字符集的...
在本资源中,我们将讨论如何使用 Java 语言导出 Oracle 数据库中的单表数据。该资源提供了一个完整的示例代码,展示了如何使用 Java 语言连接 Oracle 数据库,执行导出操作,并处理可能出现的错误。 知识点 1:Java...
总结来说,ojdbc8.jar是Java连接Oracle数据库的关键组件,配合正确的配置和使用,可以实现高效、稳定的数据库操作。同时,考虑到字符集支持,`orai18n.jar`也可能成为项目中的重要部分,特别是处理多语言数据时。...
Oracle 数据库多语言入库问题的解决方案是针对企业在国际化进程中遇到的多国语言信息存储难题,尤其是在使用Oracle数据库时,由于字符集的不兼容性导致非中文语言数据入库时出现乱码。Oracle数据库作为全球广泛使用...
然而,在使用Oracle数据库时,字符集的配置至关重要,因为它直接影响到数据的存储、显示和处理。若配置不当,可能会导致数据乱码,尤其是在涉及多语言环境的数据操作时。 1. 什么是字符集 字符集是指数据库支持的...
在Java应用中,数据在JVM(Java虚拟机)内部是以Unicode编码存储的,而Oracle数据库可能采用不同的字符集,如GBK或UTF-8等。因此,当数据在两者之间传输时,如果没有正确设置编码转换,就可能出现乱码。 1. **配置...
在Oracle中处理UTF8编码的数据时,需要确保数据库和客户端的字符集设置正确,以避免乱码问题。在使用汉字转拼音Package时,必须保证数据存储和传输过程中都使用UTF8编码,否则可能会出现转换错误。 该Package包的...
Oracle字符集是数据库管理系统Oracle中的一个关键概念,用于定义数据的编码方式,使得数据库能够存储和处理各种语言的字符。本文主要探讨了在不同字符集的Oracle数据库间如何有效地进行数据存取。Oracle的全球化支持...
当需要在不同的操作系统或者不同的客户端应用之间传输数据时,可能需要修改Oracle客户端的字符集设置以匹配服务器端的字符集。 1. **在Windows操作系统中修改**: - 打开注册表编辑器(`regedit`)。 - 寻找键值`...
springboot在集成flowable时,添加flowable依赖,配置完成数据库连接,项目第一次启动会初始化数据库flowable相应的表,默认会加载的字符集为utf8(CHARSET=utf8 COLLATE utf8_bin),在mysql8后,在创建数据库时,...