Jenis data
SQLite hanya memiliki empat jenis data primitif: INTEGER, REAL, TEXT, dan BLOB. API yang mengembalikan nilai database sebagai object
hanya akan mengembalikan salah satu dari empat jenis ini. Jenis .NET tambahan didukung oleh Microsoft.Data.Sqlite, tetapi nilai pada akhirnya dikoerasi antara jenis ini dan salah satu dari empat jenis primitif.
.NET | SQLite | Keterangan |
---|---|---|
Boolean | INTEGER | 0 atau 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. FFFFFFF |
Decimal | TEXT | 0.0########################### format. REAL akan rugi. |
Laju | REAL | |
Guid | TEXT | 00000000-0000-0000-0000-000000000000 |
Int16 | INTEGER | |
Int32 | INTEGER | |
Int64 | INTEGER | |
SByte | INTEGER | |
Tunggal | REAL | |
String | TEXT | UTF-8 |
TimeOnly | TEXT | HH:mm:ss.fffffff |
TimeSpan | TEXT | d.hh:mm:ss.fffffff |
UInt16 | INTEGER | |
UInt32 | INTEGER | |
UInt64 | INTEGER | Luapan nilai besar |
Jenis alternatif
Beberapa jenis .NET dapat dibaca dari jenis SQLite alternatif. Parameter juga dapat dikonfigurasi untuk menggunakan jenis alternatif ini. Untuk informasi selengkapnya, lihat Parameter.
.NET | SQLite | Keterangan |
---|---|---|
Char | INTEGER | UTF-16 |
DateOnly | REAL | Nilai hari Julian |
DateTime | REAL | Nilai hari Julian |
DateTimeOffset | REAL | Nilai hari Julian |
Guid | BLOB | |
TimeOnly | REAL | Selama beberapa hari |
TimeSpan | REAL | Selama beberapa hari |
Misalnya, kueri berikut membaca nilai TimeSpan dari kolom REAL dalam tataan hasil.
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}.");
}
}
Jenis kolom
SQLite menggunakan sistem jenis dinamis di mana jenis nilai dikaitkan dengan nilai itu sendiri dan bukan kolom tempat nilai disimpan. Anda bebas menggunakan nama jenis kolom apa pun yang Anda inginkan. Microsoft.Data.Sqlite tidak akan menerapkan semantik tambahan apa pun ke nama-nama ini.
Nama jenis kolom memang berdampak pada afinitas jenis. Salah satu gotcha umum adalah bahwa menggunakan jenis kolom STRING akan mencoba mengonversi nilai menjadi INTEGER atau REAL, yang dapat menyebabkan hasil yang tidak terduga. Sebaiknya hanya gunakan empat nama jenis SQLite primitif: INTEGER, REAL, TEXT, dan BLOB.
SQLite memungkinkan Anda menentukan faset jenis seperti panjang, presisi, dan skala, tetapi tidak diberlakukan oleh mesin database. Aplikasi Anda bertanggung jawab untuk memberlakukan ini.