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.