Oracle
är väldigt väldigt väldigt gammal.
Tillbaka i 80's
när det utvecklades (och innan det fanns några standarder) tyckte de att det var en bra idé, och givet då Oracle
lagrar sina värden, det var det verkligen.
Så här gör du Oracle
lagrar data (hämtad från dokumentationen ):
Ingen datatyp lagras i datan, bara datalängden och själva datan.
Om NULL
förekommer mellan två kolumner med värden, den lagras som en enda byte vilket betyder att kolumnen har längden 0
(faktiskt 0xFF
). Efterföljande NULL
s lagras inte alls.
Så för att lagra värdet 'test'
, Oracle
behöver lagra 5 byte:04 74 65 73 74
.
Men att lagra både en tom sträng och en NULL
, Oracle
behöver bara ställa in datalängden till 0
.
Väldigt smart om din data ska lagras på 20 Mb
hårddiskar som kostar 5,000$
varje.
Senare, när standarderna dök upp, var det inte så bra längre, men vid den tiden fanns det redan massor av kod som förlitade sig på NULL
och ''
är samma sak.
Gör VARCHAR
att göra en sådan distinktion kommer att gå sönder ton kod.
För att fixa det döpte de om VARCHAR
till VARCHAR2
(som inte är en del av någon standard), angav att VARCHAR2
kommer aldrig skilja mellan en NULL
och en tom sträng och uppmanade alla att använda denna datatyp istället.
Nu väntar de förmodligen på den sista personen som använde en VARCHAR
i Oracle
databas att dö.