Condividi tramite


Tipo di dati

SQLite ha solo quattro tipi di dati primitivi: INTEGER, REAL, TEXT e BLOB. Le API che restituiscono valori di database come object restituiranno solo uno di questi quattro tipi. Microsoft.Data.Sqlite supporta anche altri tipi .NET, ma in ultima analisi i valori sono impostati forzatamente tra questi tipi e uno dei quattro tipi primitivi.

.NET SQLite Osservazioni:
Booleano INTEGER 0 oppure 1
Byte INTEGER
Byte[] BLOB
Char TEXT UTF-8
DateOnly TEXT yyyy-MM-dd
Data/Ora TEXT yyyy-MM-dd HH:mm:ss.FFFFFFF
DateTimeOffset TEXT yyyy-MM-dd HH:mm:ss.FFFFFFFzzz
Decimale TEXT Formato 0.0###########################. REAL genererebbe una perdita di dati.
Double REAL
GUID TEXT 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 INTEGER
Int64 INTEGER
SByte INTEGER
Singola REAL
String TEXT UTF-8
TimeOnly TEXT HH:mm:ss.fffffff
TimeSpan TEXT d.hh:mm:ss.fffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Overflow di valori di grandi dimensioni

Tipi alternativi

Alcuni tipi .NET possono essere letti da tipi SQLite alternativi. È anche possibile configurare i parametri per l'uso di questi tipi alternativi. Per altre informazioni, vedere Parametri.

.NET SQLite Osservazioni:
Char INTEGER UTF-16
DateOnly REAL Valore del giorno giuliano
Data/Ora REAL Valore del giorno giuliano
DateTimeOffset REAL Valore del giorno giuliano
GUID BLOB
TimeOnly REAL In giorni
TimeSpan REAL In giorni

Ad esempio, la query seguente legge un valore TimeSpan da una colonna REAL nel set di risultati.

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}.");
    }
}

Tipi di colonna

SQLite usa un sistema di tipi dinamici in cui il tipo di un valore è associato al valore stesso e non alla colonna in cui è archiviato. È possibile usare qualsiasi nome di tipo di colonna desiderato. Microsoft.Data.Sqlite non applicherà alcuna semantica aggiuntiva a questi nomi.

Il nome del tipo di colonna ha un impatto sull'affinità del tipo. Un problema comune è che usando un tipo di colonna STRING verrà tentata la conversione dei valori in INTEGER o REAL, causando risultati imprevisti. È consigliabile usare solo i quattro nomi di tipi SQLite primitivi: INTEGER, REAL, TEXT e BLOB.

SQLite consente di specificare facet dei tipi come lunghezza, precisione e scala, ma questi non vengono applicati dal motore di database. La responsabilità di applicarli è dell'applicazione.

Vedi anche