Compartir a través de


Tipos de datos

SQLite solo tiene cuatro tipos de datos primitivos: INTEGER, REAL, TEXT y 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 Comentarios
Booleano INTEGER 0 o 1
Byte INTEGER
Byte[] BLOB
Char TEXT UTF-8
DateOnly TEXT yyyy-MM-dd
DateTime TEXT aaaa-MM-dd HH:mm:ss.FFFFFFF
DateTimeOffset TEXT aaaa-MM-dd HH:mm:ss.FFFFFFFzzz
Decimal TEXT Formato 0.0###########################. REAL tendría pérdidas.
Doble 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 Comentarios
Char INTEGER UTF-16
DateOnly real Valor de día juliano
DateTime real Valor de día juliano
DateTimeOffset real Valor de día juliano
GUID BLOB
TimeOnly real En días
TimeSpan real En días

Por ejemplo, en la consulta siguiente se lee un valor TimeSpan de una columna REAL 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 en la que se almacena. Puede usar cualquier nombre de tipo de columna que quiera. Microsoft.Data.SQLite no aplicará ninguna semántica adicional a estos nombres.

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

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

Vea también