android sqlite3 adb命令学习(3)
一个具有数字类型亲和性的列也许使用所有的五个存储类型存储值.当文本数据被插入一个数字列时, 在存储之前,数据库将尝试着把文本转换成整
数或实数.如果能成功转换的话,值将按证书活实数的类型被存储. 如果不能成功转换的话,值则只能按文本类型存储了,而不会被转换成无类型或
BLOB类型来存储.
一个具有整数亲和力的列在转换方面和具有数字亲和力的列是一样的,但也有些区别 , 比如没有浮动量的实值(文本值转换的值)被插入具有整数亲
和力的列时,它将被转换成整数并按整数类型存储.
一个具有无类型亲和力的列不会优先选择使用哪个类型.在数据被输入前它不会强迫数据转换类型.
2.1 列的亲和性的决定
一个列的亲和类型是由该列所宣称的类型决定的.遵守以下规则:
a. 如果数据类型包括字符串"INT"那么它被定义成具有整数亲和性.
b. 如果列中的数据类型包括以下任何的字符串 "CHAR", "CLOB", or "TEXT" 那么这个列则具有文本亲和性.要注意VARCHAR类型包括字符串"CHAR"
因此也具有文本类型亲和性.
c. 如果一个列的数据类型包括字符串"BLOB"或者如果数据类型被具体化了,
那么这个列具有无类型亲和性.
d. 否则就具有数字类型亲和性.
如果表格使用If "CREATE TABLE AS SELECT..."语句生成的,那么所有的列则都没有具体的数据类型,则没有类型亲和性.
2.2 列的亲和性的例子
CREATE TABLE t1(
t TEXT,
nu NUMERIC,
i INTEGER,
no BLOB
);
-- Storage classes for the following row:
-- TEXT, REAL, INTEGER, TEXT
INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0');
-- Storage classes for the following row:
-- TEXT, REAL, INTEGER, REAL
INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0);
3. 比较表达式
像SQLite2.0版一样,3.0版的一个特性是二进制比较符'=', '<', '<=', '>=' and '!=', 一个操作'IN'可以测试固定的成员资格, 三重的比较操作
符'BETWEEN'.
比较的结果决定于被比较的两个值的存储类型。遵循以下规则:
一个具有空存储类型的值被认为小于任何值(包括另外一个具有空存储类型的值)。
一个整数值或实数值小于任何文本值和BLOB值。 当一个整数或实数和另一个整数或实数相比较的时候,则按照实际数值来比较。
一个文本值小于BLOB值。当两个文本值相比较的时候,则用C语言类库中的memcmp()函数来比较。 然而,有时候也不是这样的,比如在下面所描述
的“用户定义的整理顺序”情况下。
当两个BLOB文本被比较的时候,结果决定于memcmp()函数。
在开始比较前,SQLite尝试着把值在数字存储级(整数和实数)和文本之间相互转换。下面列举了关于如何比较二进制值的例子。在着重号below中
使用的表达式可以表示SQL标量表达式或是文本但不是一个列值。
当一个列值被比拟为表达式结果的时候,在比较开始前,列的亲和性将被应用在表达结果中。
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>