Compartir a través de


Tipos de datos

SQLite solo tiene cuatro tipos de datos primitivos: INTEGER, REAL, TEXTy BLOB. Las API que devuelven valores de base de datos como object solo devolverán uno de estos cuatro tipos. Microsoft.Data.SQLite admite tipos de .NET adicionales, pero los valores se convierten en última instancia entre estos tipos y uno de los cuatro tipos primitivos.

.NET SQLite Observaciones
Boolean INTEGER 0 o 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 sería una pérdida.
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 Desbordamiento de valores grandes

Tipos alternativos

Algunos tipos de .NET se pueden leer desde tipos de SQLite alternativos. Los parámetros también se pueden configurar para usar estos tipos alternativos. Para obtener más información, vea Parámetros.

.NET SQLite Observaciones
Char INTEGER UTF-16
DateOnly REAL Valor del día juliano
DateTime REAL Valor del día juliano
DateTimeOffset REAL Valor del día juliano
Guid BLOB
TimeOnly REAL En días
TimeSpan REAL En días

Por ejemplo, la consulta siguiente lee un valor TimeSpan de una REAL columna del 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 columna

SQLite usa un sistema de tipos dinámicos en el que el tipo de un valor está asociado al propio valor y no a la columna donde se almacena. Puede usar el nombre de tipo de columna que desee. Microsoft.Data.Sqlite no aplicará ninguna semántica adicional a estos nombres.

El nombre del tipo de columna tiene un impacto en la afinidad de tipo. Un gotcha común es que el uso de un tipo de columna de STRING intentará convertir valores en INTEGER o REAL, lo que puede dar lugar a resultados inesperados. Se recomienda usar solo los cuatro nombres primitivos de tipo SQLite: INTEGER, REAL, TEXTy BLOB.

SQLite permite especificar facetas de tipo como longitud, precisión y escala, pero el motor de base de datos no las aplica. Tu aplicación es responsable de aplicarlas.

Consulte también