LOB 具有 Long 数据类型的特点,也有自己的特点。由于它具有 Long 的特性,因此可以将附加的特殊特性赋予 Long 数据类型本身。因此,无需再拥有一种数据类型 LOB 并且 Long 本身可以一直使用。那为什么Long被LOB取代了呢?
即使 LOB 是 LONG 的替代品,Long 仍然可以用于最新版本的 Oracle 以实现向后兼容性。这是额外的开销吧?
LOB 具有 Long 数据类型的特点,也有自己的特点。由于它具有 Long 的特性,因此可以将附加的特殊特性赋予 Long 数据类型本身。因此,无需再拥有一种数据类型 LOB 并且 Long 本身可以一直使用。那为什么Long被LOB取代了呢?
即使 LOB 是 LONG 的替代品,Long 仍然可以用于最新版本的 Oracle 以实现向后兼容性。这是额外的开销吧?
LOB 实际上是四种不同的数据类型:CLOB 代表 LONG,BLOB 代表 LONG RAW,再加上 BFILE 和 XMLType。甲骨文早在 1990 年代就引入了这些类型,因为 LONG(和 LONG RAW)很烂!并且非常难以合作。如果数据库版本为 8.0 或更高版本,则没有理由使用 LOB 的 LONG intsead。
那么为什么我们仍然有 LONG 呢?
LONG 和 CLOB 是原始数据类型。因此,尽管理论上 Oracle 可以修改 LONG 以在实践中具有 CLOB 的“附加特殊功能”,这对将数据库升级到 8.0(引入 LOB 的版本)产生灾难性影响是正确的。
说灾难性可能是双曲线的,但事实是将 CLOB 风格的特征改造为 LONG 意味着改变数据类型。因此,升级必须包括自动数据转换。此外,可能还有各种低级例程,它们的行为需要改变。这只是数据损坏的巨大载体。引入新数据类型并让各个站点处理迁移要简单得多(因此更安全)。
Oracle 自 8.0 以来已弃用 LONG,并提供了将 LONG 转换为 CLOB 的机制,因此在理想情况下,每个人都会继续前进,Oracle 可以从数据库中删除 LONG 数据类型。然而,在现实生活中,许多商店仍在使用 LONG,太多会损坏。
所以甲骨文不得不留住他们。问题的规模可以从 Oracle 在数据字典(如 USER_/ALL_/DBA_VIEWS)中仍然使用 LONG 本身这一事实得出。