Поделиться через


Типы данных

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

.СЕТЬ SQLite Замечания
Булев тип ЦЕЛОЕ ЧИСЛО 0 или 1
Байт ЦЕЛОЕ ЧИСЛО
Байт[] BLOB-объект
Уголь ТЕКСТ UTF-8
ТолькоДата ТЕКСТ гггг-ММ-дд
дата и время ТЕКСТ гггг-ММ-дд ЧЧ:мм:сс. FFFFFFF
DateTimeOffset (смещение даты и времени) ТЕКСТ гггг-ММ-дд ЧЧ:мм:сс. FFFFFFFzzz
Десятичное число ТЕКСТ 0.0########################### формат. REAL будет с потерями.
Двойной РЕАЛЬНЫЙ
Гид ТЕКСТ 00000000-0000-0000-0000-000000000000
Int16 ЦЕЛОЕ ЧИСЛО
Int32 ЦЕЛОЕ ЧИСЛО
Int64 ЦЕЛОЕ ЧИСЛО
SByte ЦЕЛОЕ ЧИСЛО
Один РЕАЛЬНЫЙ
Струна ТЕКСТ UTF-8
TimeOnly ТЕКСТ HH:mm:ss.fffffff
Интервал времени ТЕКСТ d.hh:mm:ss.fffffff
UInt16 ЦЕЛОЕ ЧИСЛО
UInt32 ЦЕЛОЕ ЧИСЛО
UInt64 ЦЕЛОЕ ЧИСЛО Переполнение из-за больших значений

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

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

.СЕТЬ SQLite Замечания
Уголь ЦЕЛОЕ ЧИСЛО UTF-16
ТолькоДата РЕАЛЬНЫЙ Значение дня Джулиана
дата и время РЕАЛЬНЫЙ Значение дня Джулиана
DateTimeOffset (смещение даты и времени) РЕАЛЬНЫЙ Значение дня Джулиана
Гид BLOB-объект
TimeOnly РЕАЛЬНЫЙ В днях
Интервал времени РЕАЛЬНЫЙ В днях

Например, следующий запрос считывает значение 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 позволяет указать аспекты типа, такие как длина, точность и масштаб, но они не применяются ядром СУБД. Ваше приложение отвечает за применение этих правил.

См. также