Java JDBCCLOB和NClob

Java JDBCCLOB和NClob,java,oracle,jdbc,Java,Oracle,Jdbc,java.sql.Clob和java.sql.NClob之间有什么区别吗?java.sql.NClob接口没有新方法。我尝试了以下方法: 安装程序SQL: create table tab(id number(2), clobcol clob, nclobcol nclob) insert into tab values (1, to_clob('你好'), to_nclob('你好')) JDBC代码: conn = getConnection(); stmt = conn.createSt

java.sql.Clob
java.sql.NClob
之间有什么区别吗?
java.sql.NClob
接口没有新方法。我尝试了以下方法:

安装程序SQL:

create table tab(id number(2), clobcol clob, nclobcol nclob)
insert into tab values (1, to_clob('你好'), to_nclob('你好'))
JDBC代码:

conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from tab");
rs.next();
Clob c = rs.getClob(2);
NClob nc = rs.getNClob(3);
InputStream inputStream1 = c.getAsciiStream();
InputStream inputStream2 = nc.getAsciiStream();
System.out.println(inputStream1.available());
System.out.println(inputStream2.available());
c.free();
nc.free();
我也尝试了一些其他的方法,看起来和输出没有区别。是否有一个具体的我可以看到一些差异

在数据库中添加了受支持的字符集:

SELECT parameter, value
  FROM v$nls_parameters
  3   WHERE parameter LIKE '%CHARACTERSET';

PARAMETER             VALUE
--------------------------------- --------------------
NLS_CHARACTERSET          AL32UTF8
NLS_NCHAR_CHARACTERSET        AL16UTF16

在过去(80年代),许多数据库是使用US7ASCII(在美国)或ISOLATIN1(在欧洲)作为字符集创建的。对于今天仍然存在的这些数据库(经过多次升级),存储非ASCII字符串数据的唯一方法是使用特殊类型的NVARCHAR或NCLOB。直接使用UTF8(现在是Oracle中的默认值)作为编码创建的较新数据库不使用这些Nxxx类型。

NCLOBs列使用数据库的国家字符集,CLOB使用数据库的字符集。如果数据库的默认字符集不支持特殊类型的数据,则可以创建N(CLOB、VARCHAR2等)列来存储数据。是的,我在发布这个问题之前读过这个帖子。我无法举出一个例子来说明两者的区别。如果两个字符集都能存储您输入的字符,则没有区别。如果我没有弄错的话,在UTF-16中可以表示的字符只有很少几个是在UTF-8中不能表示的。如果
NLS\U字符集
是单字节字符集,则会有所不同。Nxxx类型的列是否有任何副作用/缺点?我们计划使用它来存储非ascii字符,因为出于性能原因,我们的数据库被配置为单字节。