Oracle
ist sehr sehr sehr alt.
Zurück in den 80's
als es entwickelt wurde (und bevor es irgendwelche Standards gab) hielten sie es für eine gute Idee und gaben dann Oracle
den Weg speichert seine Werte, es war wirklich.
So funktioniert Oracle
speichert Daten (entnommen aus der Dokumentation ):
Innerhalb der Daten wird kein Datentyp gespeichert, nur die Datenlänge und die Daten selbst.
Wenn der NULL
zwischen zwei Spalten mit Werten auftritt, wird es als einzelnes Byte gespeichert, was bedeutet, dass die Spalte die Länge 0
hat (eigentlich 0xFF
). Nachfolgendes NULL
s werden überhaupt nicht gespeichert.
Also um den Wert 'test'
zu speichern , Oracle
muss 5 Bytes speichern:04 74 65 73 74
.
Allerdings, um sowohl einen leeren String als auch einen NULL
zu speichern , Oracle
muss nur die Datenlänge auf 0
setzen .
Sehr schlau, wenn Ihre Daten auf 20 Mb
gespeichert werden sollen Festplatten, die 5,000$
kosten jeweils.
Später, als die Standards auftauchten, war das keine so gute Idee mehr, aber zu diesem Zeitpunkt gab es bereits sehr viele Codes, die auf NULL
angewiesen waren und ''
dasselbe sein.
Erstellen von VARCHAR
eine solche Unterscheidung zu machen, wird Tonnen brechen des Codes.
Um das Problem zu beheben, wurde VARCHAR
umbenannt zu VARCHAR2
(was nicht Teil eines Standards ist), gab an, dass VARCHAR2
wird nie zwischen einem NULL
unterscheiden und einen leeren String und forderte alle auf, stattdessen diesen Datentyp zu verwenden.
Jetzt warten sie wahrscheinlich auf die letzte Person, die einen VARCHAR
verwendet hat in Oracle
Datenbank zu sterben.