Sdílet prostřednictvím


Datové typy

SQLite má pouze čtyři primitivní datové typy: INTEGER, REAL, TEXTa BLOB. Rozhraní API, která vracejí hodnoty databáze jako object, vždy vrátí pouze jeden z těchto čtyř typů. Microsoft.Data.Sqlite podporuje další typy .NET, ale hodnoty se nakonec mezi těmito typy a jedním ze čtyř primitivních typů přetěžují.

platforma .NET SQLite Poznámky
Boolean INTEGER 0 nebo 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########################### formát. REAL by bylo ztrátové.
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 Přetečení velkých hodnot

Alternativní typy

Některé typy .NET lze číst z alternativních typů SQLite. Parametry lze také nakonfigurovat tak, aby používaly tyto alternativní typy. Další informace najdete v tématu Parametry.

platforma .NET SQLite Poznámky
Char INTEGER UTF-16
DateOnly REAL Hodnota julianského dne
DateTime REAL Hodnota julianského dne
DateTimeOffset REAL Hodnota julianského dne
Guid BLOB
TimeOnly REAL Ve dnech
TimeSpan REAL Ve dnech

Například následující dotaz načte hodnotu TimeSpan ze REAL sloupce v sadě výsledků.

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 sloupců

SQLite používá systém dynamického typu, ve kterém je typ hodnoty přidružený k samotné hodnotě, a ne sloupec, ve kterém je uložen. Můžete použít jakýkoli název typu sloupce, který chcete použít. Microsoft.Data.Sqlite na tyto názvy nepoužije žádnou další sémantiku.

Název typu sloupce má vliv na spřažení typu. Jedním z běžných potíží je, že použití typu sloupce STRING se pokusí převést hodnoty na INTEGER nebo REAL, což může vést k neočekávaným výsledkům. Doporučujeme použít pouze čtyři primitivní názvy typů SQLite: INTEGER, REAL, TEXT, a BLOB.

SQLite umožňuje zadat omezující vlastnosti typu, jako je délka, přesnost a měřítko, ale databázový stroj je nevynucuje. Vaše aplikace zodpovídá za vynucování těchto práv.

Viz také