Java 如果NLS_CHARACTERSET=AZ8ISO8859P9E,JDBC如何连接到Oracle?
如果NLS_CHARACTERSET=AZ8ISO8859P9E,JDBC如何连接到Oracle? 我使用的是Java 如果NLS_CHARACTERSET=AZ8ISO8859P9E,JDBC如何连接到Oracle?,java,oracle,jdbc,Java,Oracle,Jdbc,如果NLS_CHARACTERSET=AZ8ISO8859P9E,JDBC如何连接到Oracle? 我使用的是ojdbc6/java1.8/CentOS。当我有机会将NLS_字符集连接到AL32UTF8时,我可以连接 但是当Oracle DB中的NLS\U字符集等于AZ8ISO8859P9E时,我需要连接 这是一个例外: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 你可以用它
ojdbc6/java1.8/CentOS
。当我有机会将NLS_字符集连接到AL32UTF8时,我可以连接
但是当Oracle DB中的NLS\U字符集
等于AZ8ISO8859P9E
时,我需要连接
这是一个例外:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
你可以用它
ALTER DATABASE CHARACTER SET AZ8ISO8859P9E;
如果上述操作失败,请使用:
ALTER DATABASE CHARACTER SET INTERNAL_USE AZ8ISO8859P9E;
SHUTDOWN IMMEDIATE;
STARTUP;
或
实际上AL32UTF8
是UTF-8
在Oracle中还有一个字符集,名为UTF8
,这是一种用词不当的字符集
据我所知,这类似于1999年Unicode版本3的UTF-8
您可以使用小于65535
(基本多语言平面)AL32UTF8
和UTF8
的Unicode字符
用于检查支持oracle的字符集。检查这个
对于阵列索引边界外异常
抛出它是为了指示数组已被非法索引访问。索引为负数或大于或等于数组的大小。
因此,请检查您的相关代码。首先,不使用
AL32UTF8
创建数据库是一个巨大的失败。甲骨文强烈反对这样做
与OCI、SQL*Plus等不同,JDBC/Java没有NLS_字符集的概念,因为Java使用的字符串总是UTF-16。驱动程序将自动将数据库字符编码转换为Java编码
NLS_CHARACTERSET
仅是C/C++应用程序所必需的,驱动程序才知道如何将数据库CHAR
/VARCHAR
转换为基本上是字节类型的C的CHAR
类型。因此字符串İlhamƏliyev
将在AL32UTF8
中转换为C的char
长度超过12字节,即14。感谢您的回复,但是我不想改变AZ8ISO8859P9E。当NLS_CHARACTERSET=AZ8ISO8859P9E时,我想通过Java连接到Oracle。你面临什么问题?连接con=DriverManager.getConnection(“jdbc:Oracle:thin:@localhost:1521:xe”、“scott”、“tiger”);我无法连接到Oracle。因为在Oracle DB NLS_CHARACTERSET=AZ8ISO8859P9E中。但不想更改NLS_字符集。我想要其他的solution@SaftarMurtuzov您收到了什么消息?线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-1?你能详细说明你的问题吗?您不必关心数据库内部字符集。而JDBC则使用UTF16编码的返回字符串,所以在使用JDBC的情况下,您甚至不必关心会话字符集。内部字符集到客户端字符集之间的转换在客户端完成。您使用的是什么Oracle版本,特别是您使用的JDBC驱动程序的确切版本是什么?Oracle 11.2.0.4.0/ojdbc6execute:java-jar ojdbc6.jar,它将告诉您我以前编写的更详细的驱动程序版本。最终的字符集转换在客户端进行。因此,客户端必须将数据库内部字符集转换为应用程序字符集。例如,OCI instant client仅支持AL32UTF8和ISO-8889-1。所以您不能使用它连接到使用不同字符集的数据库。这是在规模和灵活性之间的一种折衷。所以,即使对于即时客户端,您也有基本和多语言版本,但在Oracle DB my NLS_CHARACTERSET=AL32UTF8中,我可以从Java连接。当AZ8ISO8859P9E不能。我必须做什么?@SaftarMurtuzov,提供日志输出,显示铁行为。
alter database character set UTF8;