sql >> Databasteknik >  >> RDS >> Oracle

Varför lång datatyp har ersatts av LOB i Oracle?

LOB är faktiskt fyra distinkta datatyper:CLOB för LONG och BLOB för LONG RAW, plus BFILE och XMLType. Oracle har introducerat dessa typer redan på 1990-talet eftersom LONG (och LONG RAW) är Teh Suck! och fruktansvärt jobbigt att jobba med. Det finns ingen anledning att använda LONG intsead av LOB om databasversionen är 8.0 eller högre.

Så varför har vi fortfarande LONGs?

LONG och CLOB är primitiva datatyper. Så även om det är teoretiskt sant att Oracle kunde ha ändrat LONG för att i praktiken ha "de extra specialfunktionerna" hos CLOB, vilket skulle ha haft en katastrofal inverkan på uppgradering av databaser till 8.0 (versionen som introducerade LOBs).

Att säga katastrofalt är kanske hyperboliskt men faktum är att eftermontering av funktioner i CLOB-stil till LONGs innebär att byta datatyper . Så uppgraderingen skulle ha behövt inkludera en automatisk datakonvertering. Plus att det förmodligen finns alla möjliga rutiner på låg nivå vars beteende skulle ha behövt ändras. Det är bara en enorm vektor för datakorruption. Det är mycket enklare (och därmed säkrare) att introducera en ny datatyp och låta enskilda webbplatser hantera migreringen.

Oracle har utfasat LONG sedan 8.0 och tillhandahållit mekanismer för att konvertera LONGs till CLOBs, så i en idealisk värld skulle alla ha gått vidare och Oracle kunde släppa LONG-datatyperna från databasen. Men i verkliga livet använder många butiker fortfarande LONGs och för mycket skulle gå sönder.

Så Oracle måste behålla dem. Omfattningen av problemet kan härledas från det faktum att Oracle fortfarande använder sig av LONG i dataordboken (som USER_/ALL_/DBA_VIEWS).




  1. Atomic MySQL-transaktioner i Anorm

  2. Data trunkerad för kolumn?

  3. Hur CONCAT_WS() fungerar i MariaDB

  4. ranka poster i mysql-tabellen