Вярвам, че отговорът е, че Oracle е много, много стар.
Още в старите дни, преди да има SQL стандарт, Oracle взе решението за проектиране да празни низове в VARCHAR
/VARCHAR2
колоните бяха NULL
и че е имало само едно усещане за NULL (има теоретици на релациите, които биха направили разлика между данни, които никога не са били подканени, данни, където отговорът съществува, но не е известен от потребителя, данни, където няма отговор и т.н. които представляват някакъв смисъл на NULL
).
По времето, когато се появи стандартът SQL и се съгласи, че NULL
и празният низ бяха различни обекти, вече имаше потребители на Oracle, които имаха код, който предполагаше, че двете са еквивалентни. Така че Oracle основно остана с опциите за разбиване на съществуващ код, нарушаване на SQL стандарта или въвеждане на някакъв вид параметър за инициализация, който би променил функционалността на потенциално голям брой заявки. Нарушаването на стандарта SQL (IMHO) беше най-малкото разрушително от тези три опции.
Oracle остави отворена възможността VARCHAR
типът данни ще се промени в бъдеща версия, за да се придържа към стандарта SQL (което е причината всички да използват VARCHAR2
в Oracle, тъй като поведението на този тип данни е гарантирано да остане същото занапред).