如果NLS_CHARACTERSET = AZ8ISO8859P9E,JDBC与Oracle的连接方式如何?
我使用ojdbc6/java1.8/CentOS
。当我偶然NLS_CHARACTERSET
到AL32UTF8
时,我可以连接。
但是当Oracle DB中的NLS_CHARACTERSET
等于AZ8ISO8859P9E
时,我想要连接。
这是例外:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
答案 0 :(得分:0)
你可以使用它
ALTER DATABASE CHARACTER SET AZ8ISO8859P9E;
如果上述操作失败,请使用它:
ALTER DATABASE CHARACTER SET INTERNAL_USE AZ8ISO8859P9E;
SHUTDOWN IMMEDIATE;
STARTUP;
或者
alter database character set UTF8;
实际上AL32UTF8
是UTF-8
在Oracle中,你还有一个名为UTF8
的字符集,这是一种用词不当,意味着字符集CESU-8。
据我所知,这就像"UTF-8 as of Unicode version 3 from 1999"
。
您可以使用小于65535
(基本多语言平面)AL32UTF8
和UTF8
相同的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。