Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQLite имеет только четыре примитивных типа данных: INTEGER, REAL, TEXTи BLOB. API, которые возвращают значения базы данных в виде object, всегда будут возвращать один из этих четырех типов. Дополнительные типы .NET поддерживаются Microsoft.Data.Sqlite, но значения в конечном итоге приводятся к этим типам или к одному из четырех примитивных типов.
| .NET | SQLite | Замечания |
|---|---|---|
| Boolean | INTEGER |
0 или 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########################### формат.
REAL будет с потерями. |
| 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 | Переполнение из-за больших значений |
Альтернативные типы
Некоторые типы .NET можно считывать из альтернативных типов SQLite. Параметры также можно настроить для использования этих альтернативных типов. Дополнительные сведения см. в разделе Параметры.
| .NET | SQLite | Замечания |
|---|---|---|
| Char | INTEGER | UTF-16 |
| DateOnly | REAL | Значение дня Джулиана |
| DateTime | 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, , REALTEXTи BLOB.
SQLite позволяет указать аспекты типа, такие как длина, точность и масштаб, но они не применяются ядром СУБД. Ваше приложение отвечает за применение этих правил.