Oracle字段类型及存储(一)

本文详细介绍了Oracle数据库中各种字符类型的区别,包括CHAR、VARCHAR2、NCHAR、NVARCHAR2等,探讨了它们的存储方式、长度限制及应用场景,帮助读者更好地理解和选择适合的字段类型。

       Oracle2000byte,并不是2000个字符的意思,1个字符在Oracle中可能是1byte4byte不等,需看数据库字符集的设置了。

       GBK字符集而言,ASCII码中128个字符使用1个字节进行存储,其它字符使用双字节存储;对UTF8字符集而言,ASCII码中128个字符使用1个字节进行存储,其它采用两个或三个字节进行存储,四个字节存储的是极少使用字符;

       数据库中有一个参数NLS_LENGTH_SEMANTICS这个参数有两个取值CHARBYTE。当为CHAR时字符类型的长度是按字符个数来计算,而不是按BYTE来计算,这在使用变长字符集(AL32UTF8)的情况下非常有用,因为一个字符所占用的字节数是不定的,就给我们准确估计字段长度(BYTE)带来不便。

1CHAR

      CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

2VARCHAR

      VARCHAR存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

3TEXT

      TEXT存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4NCHARNVARCHARNTEXT

      这三种从名字上看比前面三种多了个“N”。它表示存储的Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

5字符集与国家字符集

       1>字符集
             (1)
用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
             (2)
用来标示诸如表名、列名以及PL/SQL变量等
             (3)
用来存储SQLPL/SQL程序单元等

       2>国家字符集

              (1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
             (2)
国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字    符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据 库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的     AF16UTF16UTF8中选择,默认值是AF16UTF16

 

 

字段类型中文说明限制条件其它说明
CHAR固定长度字符串最大长度2000bytes
VARCHAR2可变长度的字符串最大长度4000bytes可做索引的最大长度749
NCHAR根据字符集而定的固定长度字符串最大长度2000bytes
NVARCHAR2根据字符集而定的可变长度字符串最大长度4000bytes
DATE日期(日-月-年)DD-MM-YY(HH-MI-SS)经过严格测试,无千虫问题
LONG超长字符串最大长度2G(231-1)足够存储大部头著作
RAW固定长度的二进制数据最大长度2000bytes可存放多媒体图象声音等
LONG RAW可变长度的二进制数据最大长度2G同上
BLOB二进制数据最大长度4G
CLOB字符数据最大长度4G
NCLOB根据字符集而定的字符数据最大长度4G
BFILE存放在数据库外的二进制数据最大长度4G
ROWID数据表中记录的唯一行号10bytes********.****.****格式,*为0或1
NROWID二进制数据表中记录的唯一行号最大长度4000bytes
NUMBER(P S)数字类型P为整数位,S为小数位
DECIMAL(P S)数字类型P为整数位,S为小数位
INTEGER整数类型小的整数
FLOAT浮点数类型NUMBER(38),双精度
REAL实数类型NUMBER(63),精度更高

 

 

转载于:https://www.cnblogs.com/emily_fly/archive/2012/02/28/2372613.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值