Есть ли разница между 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
В столбцах NCLOBs используется национальный набор символов вашей базы данных, а CLOB использует набор символов вашей базы данных. Когда у вас есть специальный вид данных, который не поддерживается набором символов по умолчанию для вашей базы данных, вы можете создавать столбцы N (CLOB, VARCHAR2 и т. Д.) Для хранения данных. http://stackoverflow.com/questions/6854609/what-is-the-difference-between-clob-and-nclob – JSapkota
Да, я прочитал эту тему, прежде чем публиковать этот вопрос. Я не могу придумать пример, чтобы увидеть разницу. – user2018791
Нет никакой разницы, если оба набора символов могут хранить введенные символы. Если я не ошибаюсь, в UTF-16 может быть представлено очень мало символов, которые не могут быть представлены в UTF-8. Было бы различие, если 'NLS_CHARACTERSET' был единственным байтовым набором символов. –