分析char,varchar2,nvarchar2的区别

Oracle数据库中用于存储文本字段的类型,常用的有三个,char,varchar2,nvarchar2,三个都可以存储文本,但是这三个使用起来有什么不同呢,一直傻傻分不清楚,今天就自己建个数据表体验一下。

create table AAAPPDATA
(
  id1   char(10),
  id2   char(10),
  id3   varchar2(10),
  id4   varchar2(10),
  id5   nvarchar2(10),
  id6   nvarchar2(10)
)

首先建立这么一个数据表,三个字段类型分别建两个字段,为每个字段赋值。
看一下ID2的选择状态

看一下ID3的选择状态

看一下ID5的选择状态

看一下各字段的长度

同样是存储“123”,ID2的长度是10,而ID3和ID5的长度只是3;再看选择状态,ID2被选中时,后边把空格也给选中了,ID3和ID5只是选中了“123”,说明:char的长度是固定的,而varchar2和nvarchar2的长度是可以变化的。

再看这张图片:

五个字段都报错了,各字段具体情况:
- ID1:说明char区分中英文,英文占1个字节,中文占2个字节(我的数据库字符集是gbk的)
- ID2:我是在原来“123”的基础上直接修改的,说明原来存储“123”之后自动添加了空格,需删除一个空格就正确了
- ID3:输入“1234567890”正确,输入“123456789十”报错,说明varcahr2区分中英文,同char
- ID4:同ID3,超出范围
- ID5:输入“1234567890”正确,输入“12345678901”报错,说明在nvarchar2类型中,数字、英文占1个字节
- ID6:说明nvarchar2类型不区分中英文,都占一个字节
说明:char和varchar2区分中英文,而nvarchar2不区分中英文。

总结:
1. char(n)长度为 n 个字节的固定长度且非Unicode 的字符数据。
2. varchar2(n)长度为 n 个字节的可变长度且非Unicode 的字符数据。
3. nvarchar2(n)长度为 n 个字节的可变长度且Unicode 的字符数据。
4. char的效率要比varchar2和nvarchar2高,但是varchar2和nvarchar2要比char节省空间。
5. varchar2虽然比char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar2会更好一些(网上搜的,不明觉厉)。
6. 至于为什么Oracle有varchar2,而没有varchar,据说是为了符合什么工业标准之类的东西,把那些空的字段改为null了,就是假如这个字段没有填值,(=null)可以查到值,但是(=”)查不到值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值