2017-02-21 3 views
0

Есть ли разница между java.sql.Clob и java.sql.NClob? Нет нового метода для интерфейса java.sql.NClob. Я попробовал следующее:JDBC Clob и 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 
+0

В столбцах NCLOBs используется национальный набор символов вашей базы данных, а CLOB использует набор символов вашей базы данных. Когда у вас есть специальный вид данных, который не поддерживается набором символов по умолчанию для вашей базы данных, вы можете создавать столбцы N (CLOB, VARCHAR2 и т. Д.) Для хранения данных. http://stackoverflow.com/questions/6854609/what-is-the-difference-between-clob-and-nclob – JSapkota

+0

Да, я прочитал эту тему, прежде чем публиковать этот вопрос. Я не могу придумать пример, чтобы увидеть разницу. – user2018791

+0

Нет никакой разницы, если оба набора символов могут хранить введенные символы. Если я не ошибаюсь, в UTF-16 может быть представлено очень мало символов, которые не могут быть представлены в UTF-8. Было бы различие, если 'NLS_CHARACTERSET' был единственным байтовым набором символов. –

ответ

0

В старые времена (80-ые) много баз данных, созданных с использованием US7ASCII (в США) или ISOLATIN1 (в Европе) в качестве набора символов. Для этих Базы данных, которые все еще существуют сегодня (после многих обновлений), единственный способ хранения данных, не содержащих ASCII-символов, - использовать специальные типы NVARCHAR или NCLOB. Эти типы Nxxx не используются более новыми базами данных, которые были созданы непосредственно с использованием UTF8 (теперь по умолчанию в Oracle) в качестве кодировки.

Смежные вопросы