android sqlite3 adb命令学习(5)
6. 其它亲和性模式
以上的部分所描述的都是数据库引擎在正常亲和性模式下所进行的操作, SQLite将描述其它两种亲和性模式,如下:
严格亲和性模式.在这种模式下,如果需要值之间相互转换数据存储类型的话,数据库引擎将发送错误报告,当前语句也将会重新运行.
无亲和性模式.在这种模式下,值的数据存储类型不发生转换.具有不同存储类型的值之间不能比较,但整数和实数之间可以比较.
7.用户定义的校对顺序
By default, when 当SQLite比较两个文本值的时候,通过系统设定,不管字符串的编码是什么,用memcmp()来比较. SQLite第三版允许用户提供任意
的函数来代替memcmp(),也就是用户定义的比较顺序.
除了系统预设的BINARY比较顺序,它是用memcmp()函数比较,SQLite还包含了两个额外的内置比较顺序函数, NOCASE和REVERSE:
BINARY -使用memcmp()比较字符串数据, 不考虑文本编码.
NOCASE - 和二进制一样,但在比较之前,26位的大写字母盘要被折合成相应的小写字母盘.
7.1 分配比较顺序
每个表格中的每个列都有一个预设的比较类型.如果一个比较类型不是二进制所要求的, 比较的子句将被具体化为 列的定义 来定义该列.
当用SQLite比较两个文本值时,比较顺序将按照以下的规则来决定比较的结果. 文档的第三部分和第五部分描述在何种场合下发生这种比较.
对于二进制比较符(=, <, >, <= and >=),如果每个操作数是一列的话, 那么该列的默认比较类型决定于所使用的比较顺序. 如果两个操作数都是列
的话,那么左边的操作数的比较类
型决定了所要使用的比较顺序.如果两个操作数都不是一列, 将使用二进制来比较.
表达式"x BETWEEN y and z"和 "x >= y AND x <= z"是相同的. 表达式"x IN (SELECT y ...)" 和表达式 "x = y" 使用同样的方法来操作,这是为
了决定所要使用的比较顺序.如果X是一列或者二进制的,则"x IN (y, z ...)" 形式的表达式所使用的比较顺序是X的默认的比较类型.
ORDER BY clause that is part of a SELECT statement may be assigned a collation sequence to be used for the sort operation
explicitly. In this case the explicit collation sequence is always used. Otherwise, if the expression sorted by an ORDER BY
clause is a column, then the default collation type of the column is used to determine sort order. If the expression is not a
column, then the BINARY collation sequence is used.
7.2 比较顺序的例子
下面的例子介绍了The examples below identify the collation sequences that would be used to determine the results of text
comparisons that may be performed by various SQL statements. Note that a text comparison may not be required, and no collation
sequence used, in the case of numeric, blob or NULL values.
CREATE TABLE t1(
a, -- default collation type BINARY
b COLLATE BINARY, -- default collation type BINARY
c COLLATE REVERSE, -- default collation type REVERSE
d COLLATE NOCASE -- default collation type NOCASE
相关新闻>>
- 发表评论
-
- 最新评论 更多>>