Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果NLS_CHARACTERSET=AZ8ISO8859P9E,JDBC如何连接到Oracle?_Java_Oracle_Jdbc - Fatal编程技术网

Java 如果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 你可以用它

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

我使用的是
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;