Unused pages in the database file are stored on a freelist. The 4-byte
big-endian integer at offset 32 stores the page number of the first page of the
freelist, or zero if the freelist is empty. The 4-byte big-endian integer at
offset 36 stores stores the total number of pages on the freelist.
The 4-byte big-endian integer at offset 96 stores the SQLITE_VERSION_NUMBER
value for the SQLite library that most recently modified the database file. The
4-byte big-endian integer at offset 92 is the value of the change counter when
the version number was stored. The integer at offset 92 indicates which
transaction the version number is valid for and is sometimes called the
“version-valid-for number”.
The maximum and minimum embedded payload fractions and the leaf payload
fraction values must be 64, 32, and 32. These values were originally intended
to be tunable parameters that could be used to modify the storage format of the
b-tree algorithm. However, that functionality is not supported and there are no
current plans to add support in the future. Hence, these three bytes are fixed
at the values specified.
The two 4-byte big-endian integers at offsets 52 and 64 are used to manage the
auto_vacuum and incremental_vacuum modes. If the integer at offset 52 is zero
then pointer-map (ptrmap) pages are omitted from the database file and neither
auto_vacuum nor incremental_vacuum are supported. If the integer at offset 52 is
non-zero then it is the page number of the largest root page in the database
file, the database file will contain ptrmap pages, and the mode must be either
auto_vacuum or incremental_vacuum. In this latter case, the integer at offset 64
is true for incremental_vacuum and false for auto_vacuum. If the integer at
offset 52 is zero then the integer at offset 64 must also be zero.
The 4-byte big-endian integer at offset 56 determines the encoding used for all text strings
stored in the database. A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means
UTF-16be. No other values are allowed. The sqlite3.h header file defines C-preprocessor macros
SQLITE_UTF8 as 1, SQLITE_UTF16LE as 2, and SQLITE_UTF16BE as 3, to use in place of the numeric
codes for the text encoding.
The file format write version and file format read version at offsets 18 and 19
are intended to allow for enhancements of the file format in future versions of
SQLite. In current versions of SQLite, both of these values are 1 for rollback
journalling modes and 2 for WAL journalling mode. If a version of SQLite coded
to the current file format specification encounters a database file where the
read version is 1 or 2 but the write version is greater than 2, then the
database file must be treated as read-only. If a database file with a read
version greater than 2 is encountered, then that database cannot be read or
written.
The schema format number is a 4-byte big-endian integer at offset 44. The
schema format number is similar to the file format read and write version
numbers at offsets 18 and 19 except that the schema format number refers to the
high-level SQL formatting rather than the low-level b-tree formatting. Four
schema format numbers are currently defined: