为什么Oracle中LONG
数据类型有这么多限制?为什么建议使用CLOB
代替LONG
?
答案 0 :(得分:4)
直到Oracle 7,LONG和LONG RAW是唯一可用于存储大量数据的数据类型。对LONG的限制一直存在,并且总是难以使用它们。
Oracle在Oracle 8i中添加了大对象支持作为替代旧类型的优质数据类型。通常这些是LOB,CLOB取代LONG,BLOB取代LONG RAW(加上BFILE等)。目前的文件仍然解释了"Why not use LONGs?" section中的一些好处:
LOB容量:LOB可以存储更大量的数据。 LOB可以存储4GB或更多数据,具体取决于您的系统配置。 LONG和LONG RAW类型限制为2GB数据。
表中的LOB列数:表可以有多个LOB列。表中的LOB列可以是任何LOB类型。在Oracle Database 7.3及更高版本中,表格仅限于一个LONG或LONG RAW列。
随机分段访问:LOB支持随机访问数据,但LONG仅支持顺序访问。
LOB也可以是对象属性。
从12c开始,你可以拥有最多32k的VARCHAR2
列,就像评论中提到的@thatjeffsmith一样;这将涵盖CLOB过去必须使用的很多地方,其中4k并不足以引用。
您的问题似乎暗示Oracle已经为LONG添加了限制。事实并非如此,而且你正在以错误的方式看待它。引入LOB部分是为了克服LONG已经存在的限制,the LONG data types are only kept for backward compatibility。自8i以来所写的任何东西都应该使用LOB,而任何比这更早的东西至少应该考虑将LONG转换为LOBs。 (尽管数据字典仍然在内部使用LONG ...)
我建议如果您不必维护一个卡在LONG列上的遗留系统,您几乎可以忘记它们 - 不要试图在新表中使用它们现在,即使与他们玩耍也没有多大意义。