oracle varchar2与nvarchar2的区别

The length semantics of character data types can be measured in bytes or characters. Byte semantics treat strings as a sequence of bytes. This is
the default for character data types. Character semantics treat strings as a sequence of characters. A character is technically a code point of the

database character set.

Oracle字符数据类型的长度语义有两种,即字节语义和字符语义。varchar2按照字节长度语义来限定字符串长度,而nvarchar2按照字符长度语义限定字符串长度。

查看数据库的字符集:

HR >select PARAMETER,value from v$nls_parameters where parameter like '%CHARACTERSET%';

PARAMETER                     |VALUE

------------------------------|------------------------------

NLS_CHARACTERSET              |ZHS16GBK

NLS_NCHAR_CHARACTERSET   |AL16UTF16

测试varchar2(一个汉字占用两个字节):

HR >create table test(id varchar2(5)); 

HR >insert into test values('你好');

1 row created.

HR >insert into test values('你好a');

1 row created.

HR >insert into test values('你好啊');

insert into test values('你好啊')

ERROR at line 1:

ORA-12899:  "HR"."TEST"."ID" 的值太大 (实际值: 6, 最大值: 5)

Elapsed: 00:00:00.01

           Nvarchar2字符类型存储的是unicode字符集数据,本例是AL16UTF16,它可以存放几乎所有国家的字符。当创建国家字符类型属性时候,最大长度始终
          是字符长度语义(
When you        create a table with an NCHAR or NVARCHAR2 column, the  maximum size is always in character length semantics

          测试nvarchar(2):

      HR >drop table test;

     Table dropped.

     HR >create table test(id nvarchar2(5));                  

     HR >insert into test values('你好啊是吗');

     1 row created.

     HR >insert into test values('你好啊是吗不是');

     insert into test values('你好啊是吗不是')                       *

     ERROR at line 1:

     ORA-12899:  "HR"."TEST"."ID" 的值太大 (实际值: 7, 最大值: 5)

     HR >insert into test values('aaaaaa');       

     insert into test values('aaaaaa')

                        *

     ERROR at line 1:

     ORA-12899:  "HR"."TEST"."ID" 的值太大 (实际值: 6, 最大值: 5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值