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


Типы данных

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

.NET SQLite Замечания
Boolean INTEGER 0 или 1
Byte INTEGER
Byte[] BLOB
Char TEXT UTF-8
DateOnly TEXT yyyy-MM-dd
DateTime TEXT yyyy-MM-dd HH:mm:ss.FFFFFFF
DateTimeOffset TEXT yyyy-MM-dd HH:mm:ss.FFFFFFFzzz
Decimal TEXT 0.0########################### формат. REAL будет с потерями.
Double REAL
Guid TEXT 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 INTEGER
Int64 INTEGER
SByte INTEGER
Single REAL
String TEXT UTF-8
TimeOnly TEXT HH:mm:ss.fffffff
TimeSpan TEXT d.hh:mm:ss.fffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Переполнение из-за больших значений

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

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

.NET SQLite Замечания
Char INTEGER UTF-16
DateOnly REAL Значение дня Джулиана
DateTime 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, , REALTEXTи BLOB.

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

См. также