如果NLS_CHARACTERSET = AZ8ISO8859P9E,JDBC如何与Oracle连接?

时间:2016-03-10 10:10:43

标签: java oracle jdbc

如果NLS_CHARACTERSET = AZ8ISO8859P9E,JDBC与Oracle的连接方式如何?

我使用ojdbc6/java1.8/CentOS。当我偶然NLS_CHARACTERSETAL32UTF8时,我可以连接。

但是当Oracle DB中的NLS_CHARACTERSET等于AZ8ISO8859P9E时,我想要连接。

这是例外:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

2 个答案:

答案 0 :(得分:0)

你可以使用它

ALTER DATABASE CHARACTER SET AZ8ISO8859P9E;

如果上述操作失败,请使用它:

ALTER DATABASE CHARACTER SET INTERNAL_USE AZ8ISO8859P9E;
SHUTDOWN IMMEDIATE;
STARTUP;

或者

alter database character set UTF8;

实际上AL32UTF8UTF-8

在Oracle中,你还有一个名为UTF8的字符集,这是一种用词不当,意味着字符集CESU-8

据我所知,这就像"UTF-8 as of Unicode version 3 from 1999"

您可以使用小于65535(基本多语言平面)AL32UTF8UTF8相同的Unicode字符。

用于检查能够使用oracle的charset。检查一下 https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_charsets.htm#GWUAD733

对于 ArrayIndexOutOfBoundsException

抛出表示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。 因此,请检查相关代码。

答案 1 :(得分:0)

对于初学者来说,不使用AL32UTF8创建数据库是一个史诗般的失败。甲骨文高度反对这一点。

与OCI,SQL * Plus等相反,JDBC / Java没有NLS_CHARACTERSET的概念,因为Java使用的String始终是UTF-16。驱动程序将自动将数据库字符编码转换为Java编码。 NLS_CHARACTERSET仅对于C / C ++应用程序是必需的,以便驱动程序知道如何将数据库CHAR / VARCHAR转换为C的char类型,这种类型基本上是字节类型。因此字符串İlham Əliyev将在AL32UTF8转换为C char超过12个字节,即14。