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.

.RED SQLite Observaciones
Booleano ENTERO 0 o 1
byte ENTERO
Byte[] BLOB
Carbón Mensaje de texto UTF-8
DateOnly Mensaje de texto aaaa-MM-dd
Fecha y hora Mensaje de texto aaaa-MM-dd HH:mm:ss.FFFFFFF
Desplazamiento de Fecha y Hora Mensaje de texto aaaa-MM-dd HH:mm:ss.FFFFFFFzzz
Decimal Mensaje de texto Formato 0.0###########################. REAL tendría pérdidas.
Doble REAL
GUID Mensaje de texto 00000000-0000-0000-0000-000000000000
Int16 ENTERO
Int32 ENTERO
Int64 ENTERO
SByte ENTERO
Soltero REAL
Cuerda Mensaje de texto UTF-8
TimeOnly Mensaje de texto HH:mm:ss.fffffff
TimeSpan Mensaje de texto d.hh:mm:ss.fffffff
UInt16 ENTERO
UInt32 ENTERO
UInt64 ENTERO 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.

.RED SQLite Observaciones
Carbón ENTERO UTF-16
DateOnly REAL Valor del día juliano
Fecha y hora REAL Valor del día juliano
Desplazamiento de Fecha y Hora 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 columna REAL en el 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 provocar resultados inesperados. Solo se recomienda usar los cuatro nombres primitivos de tipo SQLite: INTEGER, REAL, TEXT y 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