Compartilhar via


Tipos de dados

O SQLite tem apenas quatro tipos de dados primitivos: INTEGER, e REALTEXTBLOB. As APIs que retornam valores do banco de dados como um object só retornarão um desses quatro tipos. Tipos adicionais de .NET são suportados pelo Microsoft.Data.Sqlite, mas, em última análise, os valores são convertidos entre esses tipos e um dos quatro tipos primitivos.

.NET SQLite Observações
Boolean INTEGER 0 ou 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 Formato 0.0###########################. REAL seria com perdas.
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 Estouro de valores grandes

Tipos alternativos

Alguns tipos .NET podem ser lidos a partir de tipos alternativos do SQLite. Os parâmetros também podem ser configurados para usar esses tipos alternativos. Para obter mais informações, confira Parâmetros.

.NET SQLite Observações
Char INTEGER 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 REAL coluna 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

O SQLite usa um sistema de tipo dinâmico em que o tipo de valor está associado ao valor em si e não à coluna em que ele é armazenado. Você é livre para usar qualquer nome de tipo de coluna desejado. 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 o uso de um tipo de coluna STRING tentará converter os valores para INTEGER ou REAL, o que pode levar a resultados inesperados. Recomendamos usar apenas os quatro nomes de tipo SQLite primitivos: INTEGER, , REALe TEXTBLOB.

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