Partager via


Types de données

SQLite n’a que quatre types de données primitifs : INTEGER, , REALTEXT, et BLOB. Les API qui retournent des valeurs de base de données sous forme de object ne retourneront que l’un de ces quatre types. D’autres types .NET sont pris en charge par Microsoft.Data.Sqlite, mais les valeurs sont finalement coercées entre ces types et l’un des quatre types primitifs.

.NET SQLite Remarques
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 Format 0.0###########################. REAL serait perdu.
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 j.hh:mm:ss.fffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Dépassement de grandes valeurs

Autres types

Certains types .NET peuvent être lus à partir d’autres types SQLite. Les paramètres peuvent également être configurés pour utiliser ces types alternatifs. Pour plus d’informations, consultez Paramètres.

.NET SQLite Remarques
Char INTEGER UTF-16
DateOnly REAL Valeur du jour julien
DateTime REAL Valeur du jour julien
DateTimeOffset REAL Valeur du jour julien
Guid BLOB
TimeOnly REAL En jours
TimeSpan REAL En jours

Par exemple, la requête suivante lit une valeur TimeSpan à partir d’une REAL colonne dans le jeu de résultats.

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

Types de colonnes

SQLite utilise un système de type dynamique où le type d’une valeur est associé à la valeur elle-même et non à la colonne où elle est stockée. Vous êtes libre d’utiliser le nom de type de colonne souhaité. Microsoft.Data.Sqlite n’applique aucune sémantique supplémentaire à ces noms.

Le nom du type de colonne a un impact sur l’affinité de type. Un gotcha courant est que l’utilisation d’un type de colonne de STRING tente de convertir des valeurs en INTEGER ou REAL, ce qui peut entraîner des résultats inattendus. Nous vous recommandons d’utiliser uniquement les quatre noms de types SQLite primitifs : INTEGER, , REALTEXT, et BLOB.

SQLite vous permet de spécifier des facettes de type telles que la longueur, la précision et l’échelle, mais elles ne sont pas appliquées par le moteur de base de données. Votre application est chargée de les appliquer.

Voir aussi