Tipos de dados
O SQLite tem apenas quatro tipos de dados primitivos: INTEIRO, REAL, TEXT e BLOB. As APIs que retornam valores de banco de dados como um object
só retornarão um desses quatro tipos. Tipos .NET adicionais são suportados por Microsoft.Data.Sqlite, mas os valores são finalmente coagidos entre esses tipos e um dos quatro tipos primitivos.
.NET | SQLite | Observações |
---|---|---|
Boolean | INTEIRO | 0 ou 1 |
Byte | INTEIRO | |
Byte[] | BLOB | |
Char | TEXTO | UTF-8 |
DateOnly | TEXTO | aaaa-MM-dd |
DateTime | TEXTO | aaaa-MM-dd HH:mm:ss. FFFFFFF |
DateTimeOffset | TEXTO | aaaa-MM-dd HH:mm:ss. FFFFFFFzzz |
Decimal | TEXTO | 0.0########################### formato. REAL seria perda. |
Duplo | REAL | |
GUID | TEXTO | 00000000-0000-0000-0000-000000000000 |
Int16 | INTEIRO | |
Int32 | INTEIRO | |
Int64 | INTEIRO | |
SByte | INTEIRO | |
Única | REAL | |
String | TEXTO | UTF-8 |
TimeOnly | TEXTO | HH:mm:ss.fffffff |
TimeSpan | TEXTO | d.hh:mm:ss.fffffff |
UInt16 | INTEIRO | |
UInt32 | INTEIRO | |
UInt64 | INTEIRO | Estouro de grandes valores |
Tipos alternativos
Alguns tipos .NET podem ser lidos a partir de tipos SQLite alternativos. Os parâmetros também podem ser configurados para usar esses tipos alternativos. Para obter mais informações, consulte Parâmetros.
.NET | SQLite | Observações |
---|---|---|
Char | INTEIRO | UTF-16 |
DateOnly | REAL | Valor do dia juliano |
DateTime | REAL | Valor do dia juliano |
DateTimeOffset | REAL | Valor do dia juliano |
GUID | BLOB | |
TimeOnly | REAL | Em dias |
TimeSpan | REAL | Em dias |
Por exemplo, a consulta a seguir lê um valor TimeSpan de uma coluna REAL no conjunto de resultados.
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}.");
}
}
Tipos de coluna
SQLite usa um sistema de tipo dinâmico onde o tipo de um valor está associado ao próprio valor e não à coluna onde ele está armazenado. Você é livre para usar qualquer nome de tipo de coluna que desejar. Microsoft.Data.Sqlite não aplicará nenhuma semântica adicional a esses nomes.
O nome do tipo de coluna tem um impacto na afinidade de tipo. Um problema comum é que usar um tipo de coluna de STRING tentará converter valores para INTEGER ou REAL, o que pode levar a resultados inesperados. Recomendamos usar apenas os quatro nomes de tipo SQLite primitivos: INTEIRO, REAL, TEXT e BLOB.
O SQLite permite especificar facetas de tipo como comprimento, precisão e escala, mas elas não são impostas pelo mecanismo de banco de dados. Seu aplicativo é responsável por aplicá-los.