Udostępnij przez


Typy danych

SqLite ma tylko cztery pierwotne typy danych: INTEGER, REAL, TEXTi BLOB. Interfejsy API, które zwracają wartości bazy danych jako object, będą zwracać tylko jeden z tych czterech typów. Dodatkowe typy .NET są obsługiwane przez bibliotekę Microsoft.Data.Sqlite, ale wartości są ostatecznie konwertowane między tymi typami a jednym z czterech typów pierwotnych.

.NET SQLite Uwagi
Boolean INTEGER 0 lub 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########################### format. REAL byłoby stratą.
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 Duże wartości prowadzą do przepełnienia

Typy alternatywne

Niektóre typy platformy .NET można odczytać z alternatywnych typów SQLite. Parametry można również skonfigurować do używania tych typów alternatywnych. Aby uzyskać więcej informacji, zobacz Parametry.

.NET SQLite Uwagi
Char INTEGER UTF-16
DateOnly REAL Wartość dnia juliańskiego
DateTime REAL Wartość dnia juliańskiego
DateTimeOffset REAL Wartość dnia juliańskiego
Guid BLOB
TimeOnly REAL W dniach
TimeSpan REAL W dniach

Na przykład następujące zapytanie odczytuje wartość TimeSpan z REAL kolumny w zestawie wyników.

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}.");
    }
}

Typy kolumn

SqLite używa dynamicznego systemu typów, w którym typ wartości jest skojarzony z samą wartością, a nie z kolumną, w której jest przechowywany. Możesz używać dowolnej nazwy typu kolumny. Microsoft.Data.Sqlite nie będzie stosować żadnych dodatkowych semantyki do tych nazw.

Nazwa typu kolumny faktycznie ma wpływ na powiązanie typu. Jedną z typowych gotcha jest to, że użycie typu kolumny STRING spróbuje przekonwertować wartości na INTEGER lub REAL, co może prowadzić do nieoczekiwanych wyników. Zalecamy używanie tylko czterech pierwotnych nazw typów SQLite: INTEGER, , REALTEXTi BLOB.

SQLite umożliwia określenie aspektów typu, takich jak długość, precyzja i skala, ale nie są one wymuszane przez silnik bazy danych. Aplikacja jest odpowiedzialna za wymuszanie tych czynności.

Zobacz także