Oracle
е много много много стар.
Обратно в 80's
когато беше разработен (и преди да е имало някакви стандарти), те смятаха, че това е добра идея и като се има предвид начинът Oracle
съхранява своите стойности, наистина беше така.
Ето как Oracle
съхранява данни (взети от документацията ):
В данните не се съхранява тип данни, а само дължината на данните и самите данни.
Ако NULL
възниква между две колони със стойности, съхранява се като един байт, което означава, че колоната има дължина 0
(всъщност, 0xFF
). Завършващ NULL
s изобщо не се съхраняват.
Така че, за да съхраните стойността 'test'
, Oracle
трябва да съхранява 5 байта:04 74 65 73 74
.
Въпреки това, за да съхранявате както празен низ, така и NULL
, Oracle
просто трябва да зададете дължината на данните на 0
.
Много умно, ако вашите данни трябва да се съхраняват на 20 Mb
твърди дискове, които струват 5,000$
всеки.
По-късно, когато се появиха стандартите, това вече не беше толкова добра идея, но по това време вече имаше много и много код, разчитащ на NULL
и ''
е едно и също нещо.
Създаване на VARCHAR
да направиш такова разграничение ще счупити на кода.
За да го поправят, те преименуваха VARCHAR
към VARCHAR2
(което не е част от нито един стандарт), заяви, че VARCHAR2
щеникога прави разлика между NULL
и празен низ и призова всички да използват този тип данни вместо това.
Сега те вероятно чакат последния човек, който е използвал VARCHAR
в Oracle
база данни да умре.