Oracle
jest bardzo, bardzo, bardzo stary.
Powrót w 80's
kiedy został opracowany (i zanim pojawiły się jakiekolwiek standardy), uważali, że to dobry pomysł, i biorąc pod uwagę sposób, Oracle
przechowuje swoje wartości, tak naprawdę było.
Oto jak Oracle
przechowuje dane (pobrane z dokumentacji ):
Żaden typ danych nie jest przechowywany w danych, tylko długość danych i same dane.
Jeśli NULL
występuje między dwiema kolumnami z wartościami, jest przechowywany jako pojedynczy bajt, co oznacza, że kolumna ma długość 0
(właściwie 0xFF
). Końcowy NULL
s nie są w ogóle przechowywane.
Aby zapisać wartość 'test'
, Oracle
musi przechowywać 5 bajtów:04 74 65 73 74
.
Jednak, aby przechowywać zarówno pusty ciąg, jak i NULL
, Oracle
wystarczy ustawić długość danych na 0
.
Bardzo sprytne, jeśli Twoje dane mają być przechowywane na 20 Mb
dyski twarde, które kosztują 5,000$
każdy.
Później, gdy pojawiły się standardy, nie był to już taki dobry pomysł, ale do tego czasu było już bardzo dużo kodu opartego na NULL
i ''
będąc tym samym.
Tworzenie VARCHAR
zrobienie takiego rozróżnienia złamie tony kodu.
Aby to naprawić, zmienili nazwę na VARCHAR
do VARCHAR2
(który nie jest częścią żadnego standardu) stwierdził, że VARCHAR2
nigdy rozróżnić NULL
i pusty ciąg i zachęcał wszystkich, aby zamiast tego używali tego typu danych.
Teraz prawdopodobnie czekają na ostatnią osobę, która użyła VARCHAR
w Oracle
baza danych na śmierć.