2017-07-01 3 views
0

In SQLite wird eine Null-Byte-Zeichenfolge ('') als Texttyp gespeichert und unterscheidet sich von einem NULL-Wert, der als NULL-Typ gespeichert wird. Wie wird ein NULL-Wert intern in SQLite gespeichert und wie unterscheidet er sich von einer leeren Zeichenfolge? Vorausgesetzt, dass jeder Wert in einer Tabelle mit einem Bezeichner gespeichert wird, der angibt, dass es sich um einen von 5 Typen handelt (Integer, Float, Text, Blob oder Null) und dass eine Tabelle nicht jedes Mal neu organisiert werden muss Wert eingegeben wird, der mehr Platz als ein ursprünglicher Wert einnimmt, nehme ich an, dass zusätzlich zu dem Byte, das den Datentyp des Wertes identifiziert, ein anderer Eintrag existiert - ein Zeiger auf den tatsächlichen Wert, der irgendwo in einem Stapel gespeichert ist, und möglicherweise a dritter Eintrag gibt die Länge des Eintrags in Bytes an. Es kann also sein, dass ein Nullwert durch einen Typwert von NULL gefolgt von einem Nullzeiger angezeigt wird. Dies würde zulassen, dass eine 0-Längenzeichenfolge ('') sich von einem Nullwert unterscheidet.
Bin ich irgendwo in der Nähe, wie SQLite dies behandelt? Larry HunsickerWas ist die interne Darstellung eines NULL-Wertes in SQLite?

Antwort

2

In SQLite On-Disk record format wird für jede Spalte ein Byte benötigt, um seinen Typ und seine Länge anzugeben. Es gibt keine separaten Zeiger oder Längen, und ein NULL-Wert und eine Null-Länge-Zeichenfolge haben beide eine Inhaltsgröße von null Bytes, so dass das Byte vom seriellen Typ der gesamte Speicher ist, der benötigt wird.

(Wenn einige Daten aktualisiert werden, wird die gesamte Zeile neu geschrieben.)

Verwandte Themen