Типы данных

SQLite имеет только четыре примитивных типа данных: INTEGER, REAL, TEXT и BLOB. API, возвращающие значения базы данных в виде object, возвращают только один из этих четырех типов. Microsoft.Data.Sqlite поддерживает дополнительные типы .NET, но значения в конечном итоге приводятся между этими типами и одним из четырех примитивных типов.

.NET SQLite Замечания
Логический INTEGER 0 или 1
Байт INTEGER
Byte[] BLOB-объект
Char ТЕКСТ UTF-8
DateOnly ТЕКСТ гггг-ММ-дд
Дата/время ТЕКСТ гггг-ММ-дд ЧЧ:мм:сс.FFFFFFF
DateTimeOffset ТЕКСТ гггг-ММ-дд ЧЧ:мм:сс.FFFFFFFzzz
Десятичное число ТЕКСТ Формат 0.0###########################. Значение REAL будет с потерями.
Двойной real
GUID ТЕКСТ 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 INTEGER
Int64 INTEGER
SByte INTEGER
Одна real
Строка ТЕКСТ UTF-8
TimeOnly ТЕКСТ HH:mm:ss.fffffff
TimeSpan ТЕКСТ д.чч:мм:сс.fffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Переполнение больших значений

Альтернативные типы

Некоторые типы .NET можно считывать из альтернативных типов SQLite. Параметры также можно настроить для использования этих альтернативных типов. Дополнительные сведения см. в разделе Параметры.

.NET SQLite Замечания
Char INTEGER UTF-16
DateOnly real Значение дня по юлианскому календарю
Дата/время real Значение дня по юлианскому календарю
DateTimeOffset real Значение дня по юлианскому календарю
GUID BLOB-объект
TimeOnly real В днях
TimeSpan real В днях

Например, следующий запрос считывает значение TimeSpan из столбца REAL в результирующем наборе.

command.CommandText =
@"
    SELECT name, julianday(finished) - julianday(started) AS length
    FROM task
    WHERE finished IS NOT NULL
";
using (var reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        var name = reader.GetString(0);
        var length = reader.GetTimeSpan(1);

        Console.WriteLine($"'{name}' took {length}.");
    }
}

Типы столбцов

SQLite использует систему динамических типов, где тип значения связан с самим значением, а не со столбцом, где оно хранится. Вы можете свободно использовать любое нужное имя столбца типов. Microsoft.Data.Sqlite не применяет дополнительную семантику к этим именам.

Имя типа столбца влияет на сходство типа. Одна из распространенных проблем заключается в том, что при использовании типа столбца STRING предпринимается попытка преобразовать значения в тип INTEGER или REAL, что может привести к непредвиденным результатам. Рекомендуется использовать только четыре примитивных имена типов SQLite: INTEGER, REAL, TEXT и BLOB.

SQLite позволяет задавать аспекты типа, такие как длина, точность и число знаков после запятой, но они не применяются ядром СУБД. За их применение отвечает приложение.

См. также