关于Oracle中varchar2和nvarchar2的区别及使用? 5

1.数据库码制为U8,nchar码制为U16SQL>select*fromnls_database_parameterswhereparameterin('NLS_NCH... 1. 数据库码制为U8,nchar码制为U16
SQL> select * from nls_database_parameters where parameter in('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET');

PARAMETER VALUE
------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
2. 创建测试表并插入数据:
SQL> create table zwtest(col1 varchar2(50),col2 nvarchar2(50));

Table created.

SQL> insert into zwtest values('你好','你好');

1 row created.

SQL> commit;

Commit complete.

3. 查询两种类型所占长度:
SQL> select lengthb(col1),lengthc(col1),lengthb(col2),lengthc(col2) from zwtest;

LENGTHB(COL1) LENGTHC(COL1) LENGTHB(COL2) LENGTHC(COL2)
------------- ------------- ------------- -------------
18 6 12 6

我彻底凌乱了。。。。
疑问:varchar2的长度不是限定的最大字节数嘛,而U8编码一个汉字为三到四个字节,为什么步骤三中查询出来两个汉字竟然占了18个字节?!!而nvarchar2字节数为12? 两种类型的字符数均为6?
两种类型到底怎么一个区别?使用场景分别是什么?求大仙解答!
上述测试的客户端码制为U8:

[oracle@odd ~]$ env|grep LANG
LANG=en_US.UTF-8

另外在客户端为GBK,db为GBK、db 的nchar码制为UTF16 的数据库上使用上述数据也测试了下,结果如下:
SQL> select lengthb(col1),lengthc(col1),lengthb(col2),lengthc(col2) from zwtest;

LENGTHB(COL1) LENGTHC(COL1) LENGTHB(COL2) LENGTHC(COL2)
------------- ------------- ------------- -------------
4 4 8 4

对于这个结果,varchar2可以理解,但是两个汉字用nvarchar2为什么是4个字符?不解。。。
展开
 我来答
紫暘Yangtze
2014-06-08
知道答主
回答量:18
采纳率:0%
帮助的人:4.8万
展开全部
具体到NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则
1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。
追问
您说的是DB编码为GBK的吧,我还没试,我的是U8库。
麻烦针对我测试出的现象解释下,非常感谢!
痴痴的耕耘者
2015-06-04
知道答主
回答量:2
采纳率:0%
帮助的人:2047
展开全部
因为您的系统参数:
NLS_NCHAR_CHARACTERSET AL16UTF16
即对于nchar,cvarchar2系统使用的是UFT16编码,UTF16编码就是一个字符对应2个字节的哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式