Skip to content
IntoSQL home

Data types

SQLite to SQL Server data types

Every SQLite data type that SQL Server stores differently, what the converter writes for it, when, and the report line.

View as Markdown

Each row is a type from SQLite that SQL Server stores differently: what the SQL Server script gets, why, and the line the report writes about it. The rows come from the converter's own rules, so this page matches what it does.

Convert in the browser: SQLite to SQL Server opens the converter set up for this pair. The SQLite to SQL Server migration guide covers dumping, loading and the rules for keys, indexes and names.

A report line is a fix when the converter changed something and lists it, or a problem when a value or object is worth a look.

Numbers

In SQLite In SQL Server Why Report line
DECIMAL(p,s), NUMERIC the exact type when every value fits it, else a double SQLite stores these as integers or doubles; a declared precision holds only when the values fit it. None

Booleans and bits

In SQLite In SQL Server Why Report line
BOOLEAN, BOOL bit When every value is 0 or 1; a column that also holds other values keeps them as numbers or text. None

Text

In SQLite In SQL Server Why Report line
TEXT, VARCHAR(n), CHAR(n), CLOB nvarchar(n) or nvarchar(max) SQLite never enforces a length; a declared length holds only when every value fits it. None
VARCHAR(n) holding characters past U+FFFF (emoji) nvarchar(2n), or nvarchar(max) past 4000 nvarchar counts UTF-16 units and an emoji takes two, so the column gets room for every value. text_length_widened (fix)
NUL characters in text kept The sqlite3 shell and Python cut text at a NUL character when they dump it, so only what precedes it is in the dump. None
text that isn't valid UTF-8 the bad bytes as the replacement character Dumps write such text as raw bytes; the script is UTF-8. invalid_utf8_replaced (problem)

Dates and times

In SQLite In SQL Server Why Report line
DATE, DATETIME, TIMESTAMP holding ISO 8601 text date, datetime2(p) When every value is a date or a date and time; epoch numbers and other text keep their values as they are. None

Binary

In SQLite In SQL Server Why Report line
BLOB, and columns holding bytes varbinary(max) Bytes stay bytes; text and numbers in the same column are kept as their bytes. None

JSON, spatial and other types

In SQLite In SQL Server Why Report line
declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) the type every value in the column fits SQLite keeps any value in any column, so the declared type is a hint: each column gets the type all of its values fit, and a column holding mixed values keeps their text. None
JSON holding JSON text nvarchar(max) When every value is a JSON object or array. None
Infinity in REAL columns NULL SQL Server's doubles have no infinity, so those values become NULL and the report counts them. invalid_value_null (problem)

Counters and identities

In SQLite In SQL Server Why Report line
INTEGER PRIMARY KEY, AUTOINCREMENT IDENTITY, continuing after the highest id or sqlite_sequence's Only a column declared exactly INTEGER PRIMARY KEY is the rowid; every row keeps its id, and the counter starts after the highest id ever handed out. None

Other pairs