Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum behandelt Oracle 9i eine leere Zeichenfolge als NULL?

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).