Oracle字符集整理(一)

1、CHAR和VARCHAR2类型的列最多可插入汉字为

如果数据库字符集为ZHS16GBK此类中文字符集数据库,则可插入汉子数字为:4000/2=2000个,单字节字符为4000个

如果数据库字符集为UTF8,则可插入单字节字符数为4000个,双字节字符数为:4000/2=2000个,三字节字符(汉字)为4000/3=1333个汉字+1个单字节字符


2、NLS_LENGTH_SEMANTICS参数对插入汉字的影响

如果NLS_LENGTH_SEMANTICS=CHAR且字符集为ZHS16GBK,那么CHAR和VARCHAR2定义的列长小于2000时,可插入的汉字数与定义长度相等

如果NLS_LENGTH_SEMANTICS=BYTE且字符集为ZHS16GBK,那么CHAR和VARCHAR2定义的列可插入的汉字数=定义长度/2

如果NLS_LENGTH_SEMANTICS=CHAR且字符集为UTF8,那么CHAR和VARCHAR2定义的列长小于1333时,可插入的汉字数与定义长度相等

如果NLS_LENGTH_SEMANTICS=BYTE且字符集为UTF8,那么CHAR和VARCHAR2定义的列可插入的汉字数=定义长度/3



select length(colname),lengthB(colname),dump(colname,1016) from utfbytetab;
select length(colname),lengthB(colname),dump(colname) from utfbytetab;


查看字符集名称及ID的SQL:

nls_charset_name函数根据指定的指定的ID,返回对应的字符集名称。
NLS_CHARSET_ID是根据字符集名称返回对应的ID值。

with nls as (  
select nls_charset_name(rownum) set_name,rownum id  
from dual  
connect by level <=100000)  
select *  
from nls  
where set_name is not null;  


















你可能感兴趣的:(Oracle字符集整理(一))