Partilhar via


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.

Consulte também