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
NCLOBs列使用數據庫的國家字符集,而CLOB使用數據庫的字符集。如果您有特殊類型的數據不受數據庫默認字符集支持,那麼您可以創建N(CLOB,VARCHAR2等)列來存儲數據。 http://stackoverflow.com/questions/6854609/what-is-the-difference-between-clob-and-nclob – JSapkota
是的,我在發佈這個問題之前閱讀了該線程。我不能拿出一個例子來看看區別。 – user2018791
如果兩個字符集都能夠存儲您輸入的字符,則沒有區別。如果我沒有弄錯,那麼在UTF-16中只能使用UTF-8表示的字符很少,不能用UTF-8表示。如果'NLS_CHARACTERSET'是單字節字符集,則會有區別。 –