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.