2022年10月22日 | [sqlite] csharp
sqlite 中的类型
存储类型(Storage Classes),在 sqlite 中一个值的类型与值本身相关,并不与所在“容器”相关。
存储类型 | 说明 |
---|---|
NULL | NULL值 |
INTEGER | 一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
REAL | 一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 一个 blob 数据,完全根据它的输入存储。 |
亲和类型(Type Affinity) 为了最大化保证 SQLite与其他数据库的兼容性,SQLite 可以使用其他关系数据库的类型,如下所示:
CREATE TABLE t1(a INT, b VARCHAR(10));
INSERT INTO t1(a,b) VALUES('123',456);
SQLite 在列上支持“类型亲和”的概念,列的亲和类型是该列数据的推荐类型。这里的重要思想是该类型是推荐的,而不是必需的。列仍然可以存储任何类型的数据。 只是对于某些列,会更喜欢使用一个存储类而不是另一个。 列的首选存储类称为“亲和类型”。 下表显示了当你指定某些类型时候,列对应的亲和类型:
C#类型 | sqlite类型,创建表时可指定的类型 | 亲和类型/Type Affinity(存储类型) |
---|---|---|
Int32 Int64 |
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 |
INTEGER |
String | CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB |
TEXT |
Binary | BLOB 未指定类型 |
BLOB |
Double Float |
REAL DOUBLE DOUBLE PRECISION FLOAT |
REAL |
DateTime Boolean |
NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME |
NUMERIC |
2022年10月16日 | [csharp]
从 C# 7.3 开始,可使用 unmanaged
约束指定:类型参数为“非指针、不可为 null 的非托管类型”。
从 C# 8.0 开始,仅包含非托管类型的字段的 构造 结构类型也是非托管类型。
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
非托管类型包括:
sbyte
、byte
、short
、ushort
、int
、uint
、long
、ulong
、char
、float
、double
、decimal
或 bool
2022年10月16日 | [csharp]
根据 Nick Chapsas 视频的演示,并不是所有 值类型都是在 Stack中的,下面表格显示在各种情况下 值类型所在的位置
在方法内声明的值类型 | 栈 |
在方法参数中声明的值类型 | 栈 |
声明为类成员的值类型 | 堆 |
声明为结构成员的值类型 | 其所在结构的位置 |
ref struct 值类型 | 只能在栈中 |