SQLite 只有四种基元数据类型:INTEGER、REAL、TEXT 和 BLOB。 返回数据库 object
值的 API 将仅返回这四种类型之一。 Microsoft.Data.Sqlite 支持额外的 .NET 类型,但这些类型的值最终会被强制转换为四种基本类型之一。
。网 | SQLite | 注解 |
---|---|---|
布尔型 | 整数 |
0 或 1 |
字节(Byte) | 整数 | |
Byte[] | BLOB | |
字符型 | 发短信 | UTF-8 |
DateOnly | 发短信 | yyyy-MM-dd |
DateTime | 发短信 | yyyy-MM-dd HH:mm:ss。FFFFFFF |
日期时间偏移 (DateTimeOffset) | 发短信 | yyyy-MM-dd HH:mm:ss。FFFFFFFzzz |
十进制 | 发短信 |
0.0########################### 格式。 REAL 将有损。 |
加倍 | 真正 | |
Guid | 发短信 | 00000000-0000-0000-0000-000000000000 |
Int16 | 整数 | |
Int32 | 整数 | |
Int64 | 整数 | |
SByte | 整数 | |
单身 | 真正 | |
字符串 | 发短信 | UTF-8 |
TimeOnly | 发短信 | HH:mm:ss.fffffff |
TimeSpan | 发短信 | d.hh:mm:ss.fffffff |
UInt16 | 整数 | |
UInt32 | 整数 | |
UInt64 | 整数 | 大值溢出 |
替代类型
可以从备用 SQLite 类型读取某些 .NET 类型。 还可以将参数配置为使用这些替代类型。 有关详细信息,请参阅 “参数”。
。网 | SQLite | 注解 |
---|---|---|
字符型 | 整数 | UTF-16 |
DateOnly | 真正 | 儒略日值 |
DateTime | 真正 | 儒略日值 |
日期时间偏移 (DateTimeOffset) | 真正 | 儒略日值 |
Guid | BLOB | |
TimeOnly | 真正 | 以天为单位 |
TimeSpan | 真正 | 以天为单位 |
例如,以下查询从结果集中的 REAL 列中读取 TimeSpan 值。
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}.");
}
}
列类型
SQLite 使用动态类型系统,其中值的类型与值本身相关联,而不是存储值的列。 你可以随意使用所需的任何列类型名称。 Microsoft.Data.Sqlite 不会对这些名称应用任何其他语义。
列类型名称确实会影响 类型相关性。 一个常见的 gotcha 是,使用 STRING 的列类型将尝试将值转换为 INTEGER 或 REAL,这可能会导致意外的结果。 建议仅使用四个基元 SQLite 类型名称:INTEGER、REAL、TEXT 和 BLOB。
SQLite 允许指定类型特征,例如长度、精度和刻度,但数据库引擎不会强制执行这些特征。 你的应用负责强制实施这些规定。