数据类型
在 SQLite 中,数据类型是指存储数据的方式和格式。SQLite 将数据值的存储划分为以下几种存储类型:
1. NULL:表示该值为 NULL 值。
2. INTEGER:无符号整型值。
3. REAL:浮点值。
4. TEXT:文本字符串,存储使用的编码方式为 UTF-8、UTF-16BE、UTF-16LE。
5. BLOB:存储 Blob 数据,该类型数据和输入数据完全相同。
在 SQLite 中,存储分类和数据类型有一定的差别。INTEGER 存储类别可以包含 6 种不同长度的 Integer 数据类型,而这些 INTEGER 数据一旦被读入到内存后,SQLite 会将其全部视为占用 8 个字节无符号整型。
在 SQLite 中,布尔数据类型并没有提供专门的布尔存储类型,取而代之的是存储整型 1 表示 true,0 表示 false。日期和时间数据类型也同样没有提供专门的日期时间存储类型,而是以 TEXT、REAL 和 INTEGER 类型分别不同的格式表示该类型。
类型亲缘性是 SQLite 提出的概念,目的是为了最大化 SQLite 和其他数据库引擎之间的数据类型兼容性。SQLite 会根据字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型。
SQLite 目前的版本支持以下五种亲缘类型:
1. TEXT:数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
2. NUMERIC:当文本数据被插入到亲缘性为 NUMERIC 的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么 SQLite 就会将该文本数据转换为 INTEGER 或 REAL 类型的数据。
3. INTEGER:对亲缘类型为 INTEGER 的字段,其规则等同于 NUMERIC,唯一差别是在执行 CAST 表达式时。
4. REAL:其规则基本等同于 NUMERIC,唯一的差别是不会将浮点格式的常量文本转换为 INTEGER 存储方式。
5. NONE:不做任何的转换,直接以该数据所属的数据类型进行存储。
字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表:
1. 如果类型字符串中包含 INT,那么该字段的亲缘类型是 INTEGER。
2. 如果类型字符串中包含 CHAR、CLOB 或 TEXT,那么该字段的亲缘类型是 TEXT,如 VARCHAR。
3. 如果类型字符串中包含 BLOB,那么该字段的亲缘类型是 NONE。
4. 如果类型字符串中包含 REAL、FLOA 或 DOUB,那么该字段的亲缘类型是 REAL。
数据类型是 SQLite 中一个非常重要的概念,它决定了数据在数据库中的存储方式和格式。理解数据类型,可以帮助我们更好地使用 SQLite 数据库,提高开发效率和数据库性能。