oracle中lob类型学习

oracle中支持4种类型的LOB(large object)

CLOB:字符LOB。这种类型用于存储大量的文本信息,如xml或者只是纯文本。这个数据类型需要进行字符集转换,也就是说,在获取时,这个字段中的字符会从数据库的字符集转换为客户的字符集,而在修改时会总客户的字符集转换为数据库的字符集。

NCLOB:这是另一种类型的LOB。存储在这一列中的数据所采用的字符集是数据库的国家字符集,而不是数据库的默认字符集。

BLOB:二进制LOB。这种类型用于存储大量的二进制信息,如处理文档、图像和你能想象的任何其他数据。它不会执行字符集转换。应用向BLOB写入什么位和字节,BLOB就会返回什么位和字节。

BFILE:二进制文件LOB。这与其说是一个数据库存储实体,不如说是一个指针。带BFILE列的数据库存储的只是操作系统的某个文件的一个指针。这个文件在数据库之外维护,根本不是数据库的一部分。BFILE提供了文件内容的只读访问。


因此可以将LOB分为内部LOB(CLOB、NCLOB、BLOB),外部LOB(BFILE内容存储在数据库之外,BFILE列只是一个指向操作系统中的文件的指针)

内部LOB字段在数据库内部并不是在表中记录数据(也可以设置为在表中记录(in row(最多4000字节,超过就会移出)))。LOB字段内部存储分为3个部分,如下图所示:

oracle中lob类型学习_第1张图片

table T的Txt字段是CLOB类型的,LOB内部分为LOBINDEX、LOBSEGMENT,表T的Txt字段存储的为指向LOBINDEX的地址,LOBINDEX字段存储的为LOBSEGMENT的索引。所以查找的顺序是Txt->LOBINDEX->LOBSEGMENT。

如果是行内(IN ROW)存储,那就和varchar2没有区别了,行内存储要比行外存储块。这里只是浅显的了解了LOB字段的内部存储,深入的参数不记录了



你可能感兴趣的:(oracle)