看下面的表:
CREATE TABLE foo( x integer,y text, z real );
向该表插入一条记录:INSERT INTO foo VALUES ('1', '1', '1');
再看下面例子:
CREATE TABLE foo(x, y, z);现在执行同样的插入语句:
INSERT INTO foo VALUES ('1', '1', '1');那么,是否SQLite的字段类型默认为TEXT呢?再看,还是第2个表,执行如下插入语句:
INSERT INTO foo VALUES (1, 1.0, x'10');如果你愿意,可以为SQLite的字段定义类型,这看起来跟其它数据库一样。但这不是必须的,你可以尽管违反类型定义。这是因为在任何情况下,SQLite都可以接受一个值并推断它的类型。
总之,SQLite的弱类型可表示为:1)字段可以有类型,2)类型可以通过值来推断。类型亲和性介绍这两个规定如何相互关联。所谓类型亲和性就是在强类型(strict typing)和动态类型(dynamic typing)之间的平衡艺术。--------------------------------------------------
对于数据类型,SQLite的域完整性被称为域亲和性(affinity)更合适。在SQLite中,它被称为类型亲和性(type affinity)。为了理解类型亲和性,你必须先要理解存储类和弱类型(manifest typing)。
SQLite有5个原始的数据类型,被称为存储类。存储类这个词表明了一个值在磁盘上存储的格式,其实就是类型或数据类型的同义词。这5个存储类在表4-6中描述。表 4-6
SQLite存储类
名称 | 说明 |
INTEGER | 整数值是全数字(包括正和负)。整数可以是1, 2, 3, 4, 6或 8字节。整数的最大范围(8 bytes)是{-9223372036854775808, 0, +9223372036854775807}。SQLite根据数字的值自动控制整数所占的字节数。 空注:参可变长整数的概念。 |
REAL | 实数是10进制的数值。SQLite使用8字节的符点数来存储实数。 |
TEXT | 文本(TEXT)是字符数据。SQLite支持几种字符编码,包括UTF-8和UTF-16。字符串的大小没有限制。 |
BLOB | 二进制大对象(BLOB)是任意类型的数据。BLOB的大小没有限制。 |
NULL | NULL表示没有值。SQLite具有对NULL的完全支持。 |