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.