Типы данных
SQLite имеет только четыре примитивных типа данных: INTEGER, REAL, TEXT и BLOB. API, возвращающие значения базы данных в виде object
, возвращают только один из этих четырех типов. Microsoft.Data.Sqlite поддерживает дополнительные типы .NET, но значения в конечном итоге приводятся между этими типами и одним из четырех примитивных типов.
.NET | SQLite | Замечания |
---|---|---|
Логический | INTEGER | 0 или 1 |
Байт | INTEGER | |
Byte[] | BLOB-объект | |
Char | ТЕКСТ | UTF-8 |
DateOnly | ТЕКСТ | гггг-ММ-дд |
Дата/время | ТЕКСТ | гггг-ММ-дд ЧЧ:мм:сс.FFFFFFF |
DateTimeOffset | ТЕКСТ | гггг-ММ-дд ЧЧ:мм:сс.FFFFFFFzzz |
Десятичное число | ТЕКСТ | Формат 0.0########################### . Значение REAL будет с потерями. |
Двойной | real | |
GUID | ТЕКСТ | 00000000-0000-0000-0000-000000000000 |
Int16 | INTEGER | |
Int32 | INTEGER | |
Int64 | INTEGER | |
SByte | INTEGER | |
Одна | real | |
Строка | ТЕКСТ | UTF-8 |
TimeOnly | ТЕКСТ | HH:mm:ss.fffffff |
TimeSpan | ТЕКСТ | д.чч:мм:сс.fffffff |
UInt16 | INTEGER | |
UInt32 | INTEGER | |
UInt64 | INTEGER | Переполнение больших значений |
Альтернативные типы
Некоторые типы .NET можно считывать из альтернативных типов SQLite. Параметры также можно настроить для использования этих альтернативных типов. Дополнительные сведения см. в разделе Параметры.
.NET | SQLite | Замечания |
---|---|---|
Char | INTEGER | UTF-16 |
DateOnly | real | Значение дня по юлианскому календарю |
Дата/время | real | Значение дня по юлианскому календарю |
DateTimeOffset | real | Значение дня по юлианскому календарю |
GUID | BLOB-объект | |
TimeOnly | real | В днях |
TimeSpan | real | В днях |
Например, следующий запрос считывает значение TimeSpan из столбца REAL в результирующем наборе.
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}.");
}
}
Типы столбцов
SQLite использует систему динамических типов, где тип значения связан с самим значением, а не со столбцом, где оно хранится. Вы можете свободно использовать любое нужное имя столбца типов. Microsoft.Data.Sqlite не применяет дополнительную семантику к этим именам.
Имя типа столбца влияет на сходство типа. Одна из распространенных проблем заключается в том, что при использовании типа столбца STRING предпринимается попытка преобразовать значения в тип INTEGER или REAL, что может привести к непредвиденным результатам. Рекомендуется использовать только четыре примитивных имена типов SQLite: INTEGER, REAL, TEXT и BLOB.
SQLite позволяет задавать аспекты типа, такие как длина, точность и число знаков после запятой, но они не применяются ядром СУБД. За их применение отвечает приложение.