Ich glaube, die Antwort ist, dass Oracle sehr, sehr alt ist.
In den alten Tagen, bevor es einen SQL-Standard gab, traf Oracle die Designentscheidung, dass leere Zeichenfolgen in VARCHAR
enthalten sind /VARCHAR2
Spalten waren NULL
und dass es nur eine Bedeutung von NULL gab (es gibt relationale Theoretiker, die zwischen Daten unterscheiden würden, die nie angefordert wurden, Daten, bei denen die Antwort existiert, aber dem Benutzer nicht bekannt ist, Daten, bei denen es keine Antwort gibt usw. alle von die eine gewisse Bedeutung von NULL
haben ).
Zu der Zeit, als der SQL-Standard aufkam und zustimmte, dass NULL
und die leere Zeichenfolge unterschiedliche Entitäten waren, gab es bereits Oracle-Benutzer mit Code, der davon ausging, dass die beiden gleichwertig waren. Oracle blieb also im Grunde genommen die Möglichkeit, bestehenden Code zu brechen, den SQL-Standard zu verletzen oder eine Art Initialisierungsparameter einzuführen, der die Funktionalität einer potenziell großen Anzahl von Abfragen ändern würde. Die Verletzung des SQL-Standards (IMHO) war die am wenigsten störende dieser drei Optionen.
Oracle hat die Möglichkeit offen gelassen, dass der VARCHAR
Der Datentyp würde sich in einer zukünftigen Version ändern, um dem SQL-Standard zu entsprechen (weshalb jeder VARCHAR2
verwendet in Oracle, da das Verhalten dieses Datentyps garantiert gleich bleibt).