Oracle
er meget meget meget gammel.
Tilbage i 80's
da det blev udviklet (og før der var nogen standarder), mente de, at det var en god idé, og givet dengang Oracle
gemmer sine værdier, var det virkelig.
Sådan gør du Oracle
gemmer data (taget fra dokumentationen ):
Ingen datatype gemmes i dataene, kun datalængden og selve dataene.
Hvis NULL
forekommer mellem to kolonner med værdier, den er gemt som en enkelt byte, hvilket betyder, at kolonnen har længden 0
(faktisk 0xFF
). Efterfølgende NULL
s gemmes slet ikke.
Så for at gemme værdien 'test'
, Oracle
skal gemme 5 bytes:04 74 65 73 74
.
Men for at gemme både en tom streng og en NULL
, Oracle
skal blot indstille datalængden til 0
.
Meget smart, hvis dine data skal gemmes på 20 Mb
harddiske, der koster 5,000$
hver.
Senere, da standarderne dukkede op, var det ikke en god idé længere, men på det tidspunkt var der allerede masser af kode, der var afhængige af NULL
og ''
er det samme.
Opretter VARCHAR
at gøre en sådan skelnen vil bryde tons af kode.
For at rette op på det, omdøbte de VARCHAR
til VARCHAR2
(som ikke er en del af nogen standard), udtalte, at VARCHAR2
vil aldrig skelne mellem en NULL
og en tom streng og opfordrede alle til at bruge denne datatype i stedet.
Nu venter de sandsynligvis på den sidste person, der brugte en VARCHAR
i Oracle
database til at dø.