Udostępnij za pośrednictwem


Typy danych

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

.NET SQLite Uwagi
Wartość logiczna LICZBA CAŁKOWITA 0 lub 1
Byte LICZBA CAŁKOWITA
Bajt[] BLOB
Char TEKST UTF-8
DateOnly TEKST yyyy-MM-dd
DateTime TEKST rrrr-MM-dd HH:mm:ss. FFFFFFF
DateTimeOffset TEKST rrrr-MM-dd HH:mm:ss. FFFFFFFzzz
Dziesiętne TEKST 0.0########################### Formacie. REAL byłby stratą.
Liczba rzeczywista PRAWDZIWE
Identyfikator GUID TEKST 00000000-0000-0000-0000-000000000000
Int16 LICZBA CAŁKOWITA
Int32 LICZBA CAŁKOWITA
Int64 LICZBA CAŁKOWITA
SByte LICZBA CAŁKOWITA
Pojedynczy PRAWDZIWE
String TEKST UTF-8
TimeOnly TEKST HH:mm:ss.fffffff
przedział_czasu TEKST d.hh:mm:ss.fffffff
UInt16 LICZBA CAŁKOWITA
UInt32 LICZBA CAŁKOWITA
UInt64 LICZBA CAŁKOWITA Przepełnienie dużych wartości

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 LICZBA CAŁKOWITA UTF-16
DateOnly PRAWDZIWE Wartość dnia juliana
DateTime PRAWDZIWE Wartość dnia juliana
DateTimeOffset PRAWDZIWE Wartość dnia juliana
Identyfikator GUID BLOB
TimeOnly PRAWDZIWE W dniach
przedział_czasu PRAWDZIWE W dniach

Na przykład następujące zapytanie odczytuje wartość TimeSpan z kolumny REAL 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 ma wpływ na koligację typu. Jedną z typowych gotcha jest to, że użycie typu kolumny STRING spróbuje przekonwertować wartości na wartość INTEGER lub REAL, co może prowadzić do nieoczekiwanych wyników. Zalecamy używanie tylko czterech pierwotnych nazw typów SQLite: INTEGER, REAL, TEXT i BLOB.

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

Zobacz też