Partager via


Types de données

SQLite a seulement quatre types de données primitifs : INTEGER, REAL, TEXT et BLOB. Les API qui retournent des valeurs de base de données comme object retourneront toujours l’un de ces quatre types. Les types .NET supplémentaires sont pris en charge par Microsoft.Data.Sqlite, mais les valeurs sont finalement forcées entre ces types et l’un des quatre types primitifs.

.NET SQLite Notes
Boolean ENTIER 0 ou 1
Byte ENTIER
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 pourrait générer une perte de données.
Double RÉEL
Guid TEXT 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 ENTIER
Int64 ENTIER
SByte ENTIER
Unique real
String TEXT UTF-8
TimeOnly TEXT HH:mm:ss.fffffff
TimeSpan TEXT d.hh:mm:ss.fffffff
UInt16 ENTIER
UInt32 ENTIER
UInt64 ENTIER Dépassement avec des valeurs élevées

Autres types

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

.NET SQLite Notes
Char ENTIER UTF-16
DateOnly RÉEL Valeur du jour julian
DateTime real Valeur du jour julian
DateTimeOffset real Valeur du jour julian
Guid BLOB
TimeOnly RÉEL En jours
TimeSpan RÉEL En jours

Par exemple, la requête suivante lit une valeur TimeSpan dans une colonne REAL du 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 dans laquelle elle est stockée. Vous pouvez utiliser le nom de type de colonne de votre choix. Microsoft.Data.Sqlite n’applique pas de sémantique supplémentaire à ces noms.

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

SQLite vous permet de spécifier des facettes de type comme la longueur, la précision et l’échelle, mais elles ne sont pas appliquées par le moteur de base de données. C’est votre application qui est responsable de leur application.

Voir aussi