Dela via


Datatyper

SQLite har bara fyra primitiva datatyper: INTEGER, REAL, TEXT och BLOB. API:er som returnerar databasvärden som en object returnerar bara någon av dessa fyra typer. Ytterligare .NET-typer stöds av Microsoft.Data.Sqlite, men värden tvingas i slutändan mellan dessa typer och en av de fyra primitiva typerna.

.NET SQLite Kommentarer
Booleskt INTEGER 0 eller 1
Byte INTEGER
Byte[] BLOB
Char TEXT UTF-8
DateOnly TEXT åååå-MM-dd
Datum/tid TEXT åååå-MM-dd HH:mm:ss. FFFFFFF
DateTimeOffset TEXT åååå-MM-dd HH:mm:ss. FFFFFFFzzz
Decimal TEXT 0.0########################### Format. REAL skulle vara förlustigt.
Dubbel REAL
GUID TEXT 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 INTEGER
Int64 INTEGER
SByte INTEGER
Enstaka REAL
String TEXT UTF-8
TimeOnly TEXT HH:mm:ss.fffffff
TimeSpan TEXT d.hh:mm:ss.fffffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Stora värden flödar över

Alternativa typer

Vissa .NET-typer kan läsas från alternativa SQLite-typer. Parametrar kan också konfigureras för att använda dessa alternativa typer. Mer information finns i Parametrar.

.NET SQLite Kommentarer
Char INTEGER UTF-16
DateOnly REAL Julians dagvärde
Datum/tid REAL Julians dagvärde
DateTimeOffset REAL Julians dagvärde
GUID BLOB
TimeOnly REAL I dagar
TimeSpan REAL I dagar

Följande fråga läser till exempel ett TimeSpan-värde från en REAL-kolumn i resultatuppsättningen.

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

Kolumntyper

SQLite använder ett dynamiskt typsystem där typen av ett värde är associerad med själva värdet och inte kolumnen där det lagras. Du kan använda det kolumntypsnamn du vill. Microsoft.Data.Sqlite tillämpar inga ytterligare semantik på dessa namn.

Namnet på kolumntypen påverkar typtillhörigheten. En vanlig gotcha är att om du använder en kolumntyp av STRING försöker du konvertera värden till INTEGER eller REAL, vilket kan leda till oväntade resultat. Vi rekommenderar att du bara använder de fyra primitiva SQLite-typnamnen: INTEGER, REAL, TEXT och BLOB.

Med SQLite kan du ange typfasetter som längd, precision och skala, men de tillämpas inte av databasmotorn. Din app ansvarar för att framtvinga dessa.

Se även