Compartilhar via


Tipos de dados

O SQLite tem apenas quatro tipos de dados primitivos: INTEGER, REAL, TEXT e BLOB. As APIs que retornam valores de banco de dados como um object só retornarão um desses quatro tipos. Tipos adicionais do .NET são compatíveis com o Microsoft.Data.Sqlite, mas os valores são, em última análise, impostos entre esses tipos e um dos quatro tipos primitivos.

.NET SQLite Comentários
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 teria 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 do .NET podem ser lidos 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 Comentários
Char INTEGER UTF-16
DateOnly real Valor do dia de Julian
Datetime real Valor do dia de Julian
DateTimeOffset real Valor do dia de Julian
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

O SQLite usa um sistema de tipos dinâmico em que o tipo de um valor está associado ao valor em si e não à coluna em que ele é armazenado. É possível usar qualquer nome de tipo de coluna desejado. O 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 de STRING tentará converter valores em INTEGER ou REAL, o que pode levar a resultados inesperados. Recomenda-se usar apenas os quatro nomes de tipo primitivos do SQLite: INTEGER, 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á-las.

Confira também