为什么 Oracle 中对 LONG 数据类型有如此多的限制
Why there are so much restriction on LONG datatype in Oracle
为什么 Oracle 中对 LONG
数据类型有如此多的限制?为什么建议使用 CLOB
而不是 LONG
?
在 Oracle 7 之前,LONG 和 LONG RAW 是唯一可用于存储大量数据的数据类型。对 LONG 的限制一直存在,并且总是使它们难以使用。
Oracle 在 Oracle 8i 中添加了大对象支持作为高级数据类型来替代旧类型。通常这些是 LOB,CLOB 取代 LONG,BLOB 取代 LONG RAW(加上 BFILE 等)。当前文档仍然解释了 "Why not use LONGs?" section 中的一些好处:
LOB Capacity: LOBs can store much larger amounts of data. LOBs can store 4GB of data or more depending on you system configuration. LONG and LONG RAW types are limited to 2GB of data.
Number of LOB columns in a table: A table can have multiple LOB columns. LOB columns in a table can be of any LOB type. In Oracle Database Release 7.3 and higher, tables are limited to a single LONG or LONG RAW column.
Random piece-wise access: LOBs support random access to data, but LONGs support only sequential access.
LOBs can also be object attributes.
从 12c 开始,您可以拥有最多 32k 的 VARCHAR2
列,正如@thatjeffsmith 在评论中提到的那样;这将涵盖很多过去必须使用 CLOB 的地方,而 4k 的报价还不够。
您的问题似乎暗示 Oracle 对 LONG 增加了限制。事实并非如此,您正在以错误的方式看待它。引入 LOB 的部分原因是为了克服 LONG 已有的限制,并且 the LONG data types are only kept for backward compatibility。自 8i 以来编写的任何内容都应该使用 LOB,而比这更早的任何内容现在至少应该考虑将 LONG 转换为 LOB。 (尽管数据字典内部仍然使用 LONGs...)
我建议,如果您不必维护一个被 LONG 列卡住的遗留系统,您几乎可以忘记它们 - 不要试图在新表中使用它们,并且没有现在甚至和他们一起玩耍真的很重要。
为什么 Oracle 中对 LONG
数据类型有如此多的限制?为什么建议使用 CLOB
而不是 LONG
?
在 Oracle 7 之前,LONG 和 LONG RAW 是唯一可用于存储大量数据的数据类型。对 LONG 的限制一直存在,并且总是使它们难以使用。
Oracle 在 Oracle 8i 中添加了大对象支持作为高级数据类型来替代旧类型。通常这些是 LOB,CLOB 取代 LONG,BLOB 取代 LONG RAW(加上 BFILE 等)。当前文档仍然解释了 "Why not use LONGs?" section 中的一些好处:
LOB Capacity: LOBs can store much larger amounts of data. LOBs can store 4GB of data or more depending on you system configuration. LONG and LONG RAW types are limited to 2GB of data.
Number of LOB columns in a table: A table can have multiple LOB columns. LOB columns in a table can be of any LOB type. In Oracle Database Release 7.3 and higher, tables are limited to a single LONG or LONG RAW column.
Random piece-wise access: LOBs support random access to data, but LONGs support only sequential access.
LOBs can also be object attributes.
从 12c 开始,您可以拥有最多 32k 的 VARCHAR2
列,正如@thatjeffsmith 在评论中提到的那样;这将涵盖很多过去必须使用 CLOB 的地方,而 4k 的报价还不够。
您的问题似乎暗示 Oracle 对 LONG 增加了限制。事实并非如此,您正在以错误的方式看待它。引入 LOB 的部分原因是为了克服 LONG 已有的限制,并且 the LONG data types are only kept for backward compatibility。自 8i 以来编写的任何内容都应该使用 LOB,而比这更早的任何内容现在至少应该考虑将 LONG 转换为 LOB。 (尽管数据字典内部仍然使用 LONGs...)
我建议,如果您不必维护一个被 LONG 列卡住的遗留系统,您几乎可以忘记它们 - 不要试图在新表中使用它们,并且没有现在甚至和他们一起玩耍真的很重要。