虽然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数据库的字符集方法(RAC),适用RAC
oracle数据库字符集 无法修改数据库字符集 乱码
修改oracle数据库字符集详细的操作命令
java连接AmericanascII7字符集oracle例子
Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK .
修改Oracle数据库字符集的命令行方法。 在Oracle10g上也可以使用
字符集在创建数据库时指定,在创建后通常不能更改,所以在创建数据库时能否选择一个正确的字符集就显得尤为重要。
ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期...
Oracle数据库字符集问题解析.pdf
字符集不同的Oracle数据库间交换数据的解决方法.pdf
java使用ojdbc8连接oracle数据库jar包,同时需要导入字符集支持包orai18n
Oracle数据库字符集问题解析
C#连接Oracle数据库字符串 C#连接Oracle数据库字符串
Oracle数据库升迁时字符集问题的解决.pdf
Oracle 修改字符集Oracle 修改字符集Oracle 修改字符集
ORACLE修改数据库字符集
为了确保Export、Import过程...特别要注意的是,Oracle数据库字符集通常是在创建时确定,一旦存储用户数据后就不要再修改了,因为其数据都是使用该字符集进行存储的,改换其他字符集之后,原有数据就不能够正确表示了。
在不同数据库做数据迁移、同其它系统交换数据等,常常因为字符集不同而导致迁移失败或数据库内数据变成乱码。现将oracle字符集相关的一些知识做了个简单总结
json报文的解析,写入数据库; 通过数据库取值,生成json报文
oracle 字符集修改命令oracle 字符集修改命令oracle 字符集修改命令oracle 字符集修改命令