一、varchar2()与varchar()
联系:
1.varchar/varchar2用于存储可变长度的字符串
比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个
字节
2.size 的最大值是 4000,而最小值是 1,其值表示字节数,如需要更大的长度,可
以用CLOB或BLOB;比如
varchar(20)表示最大可以存放20个字节的内容
区别:
1.varchar2一般情况下把所有字符都占两字节处理,varchar对于汉字和全角等字符
占两字节,数字,英文字符等为一个字节;
2.对于空字符串,VARCHAR2把空字符串等同于null处理,而varchar仍按照空字符串
处理;
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
比如GBK,汉字就会占两个字节,英文1个
如果是UTF-8,汉字一般占3个字节,英文还是1个。
但是一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择
GBK的编码格式,但是我们在页面做输入字符串长度的校验的时候,
还是以数据库设计字段最大长度除3来作为最大长度-----防止数据库移植时设置不同
编码格式;
比如:VARCHAR2(10),一般情况下最多存放5个汉字,10个字符
二、nvarchar和nvarchar2
联系:
1.nvarchar/nvarchar2用于存储可变长度的字符串
2.size 的最大值是 4000,而最小值是 1,其值表示字符的个数,而不是字节数
3.这两种类型更适合存储中文
区别:
1.nvarchar中字符为中文则一般按2个字节计算,英文数字等按照一个自己计算
2.nvarchar2中所有字符均按照2个字节计算;
3.nvarchar2虽然更占空间,但是它有更好的兼容性,所有推荐使用;
VARCHAR2(size)
可变长度的字符串,其最大长度为size个字节;size的最大值是4000,而最小值是1;你
必须指定一个VARCHAR2的size;
NVARCHAR2(size)
可变长度的字符串,依据所选的国家字符集,其最大长度为size个字符或字节;size的
最大值取决于储存每个字符所需的字节数,其上限为4000;你必须指定一个NVARCHAR2
的size;
三、BLOB和CLOB区别和定义
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长
文本,一个表中最多一个LONG列(long限制太多,不建议使用)
LONG RAW: 可变长二进制数据,最长2G
CLOB: 字符大对象Clob 用来存储单字节的字符数据,使用CHAR保存数据,比如
XML;
(clob允许存储文本、图片、视频、音频等信息(大数据),而text(或者
varchar等只允许256个字符))
(*注意:cllb 不支持宽度不等的字符集)
NCLOB: 一个字符大型对象,用来存储多字节的字符数据,也可容纳单字节的字符
;但不支持宽度不等的字符集;最大为4G字节;储存国家字符集
BLOB: 用于存储二进制数据,比如位图(Blob可以存储无结构的二进制数据)
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文
件不包含在数据库内。包含一个大型二进制文件的定位器,
其储存在数据库的外面;使得可以以字符流I/O访问存在数据库服务器上的外部
LOB
bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对
oracle来说是只读的,也不参与事务性控制和数据恢复.
CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能
有一列的限制
要保存图片、文本文件、Word文件各自最好用哪种数据类型?
--BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用
BLOB。
四、NUMBER(p,s)
a. 精度为p并且数值范围为s的数值;精度p的范围从1到38;数值范围s的范围是从-84
到127;
例如:NUMBER(5,2) 表示整数部分最大3位,小数部分为2位;
NUMBER(5,-2) 表示数的整数部分最大为7其中对整数的倒数2位为0,前面的取整
。
NUMBER 表示使用默认值时,在有小数的情况下,最大精度去到9。
b. 测试(表中只有一列,类型为number,测试默认精度):
1.输入:9.99999999,查询得到9.99999999
2.输入:9.999999999,查询得到10
3.输入:99.99999999,查询得到100
2.输入:999.999999,查询得到999.9999999
c. number(p,s)占用得空间为: length = floor((p+1)/2) + 1 ,如果该数值为
负数,则需要再加一个字节。
例如:NUMBER(14,4)的类型数值,存储空间为 select floor((14+1)/2) + 1
from dual 输出结果为: 8