2010-12-21 43 views
5

我需要在Oracle中创建一个表,用于存储一系列大型文本文件。查看Oracle数据类型之后,我不清楚应该使用什么类型来存储文件。Oracle数据类型的文本文件?

像VARCHAR2这样的文本特定类型的限制看起来很小(32K)。其他类型似乎不适用于文本文件(例如BFILE)。

有没有人有正确的使用类型的意见?

+2

32K只适用于PL/SQL。在表或常规SQL中,VARCHAR2最多只能存储4000个字节。 – 2010-12-21 03:56:37

回答

9

CLOB和BLOB/BFILE之间的区别在于CLOB被视为文本。也就是说,如果从数据库中提取CLOB,它将执行从数据库字符集到客户端字符集所需的任何转换(例如,从ê移除重音)。同样,当CLOB由客户端创建时,可以从客户端字符集转换为数据库字符集。如果客户端和数据库字符集都相同,则不需要或执行转换。

NCLOB与CLOB类似,只不过不是数据库字符集,转换使用NLS NCHAR字符集。

BLOB/BFILE不受转换规则的约束。

因此,通常我会使用CLOB作为文本,但是如果有一些校验和/审计线索逻辑,我甚至不希望字符集转换有丝毫的可能性,我可能会选择BLOB/BFILE。我不会考虑LONG或LONG RAW。

1

取决于你使用的是什么版本的Oracle的任CLOB或长

+2

如果您已经弃用Long,那么尽可能使用CLOB(除非您的Oracle版本太旧,否则可以使用)。 – Thilo 2010-12-21 02:36:44

1

字符数据的LOB数据类型是CLOB和NCLOB。 它们最多可以存储8 TB字符数据(CLOB)或国家字符集数据(NCLOB)。

后来Oracle建议您将现有的LONG RAW列转换为LOB列。与LONG列相比,LOB列的限制要少得多。此外,每个版本都增强了LOB功能,而LONG RAW功能在多个版本中一直保持不变。