关于sqlite的存储类型

SQLite与其他常见的DBMS的最大不同是它对数据类型的支持。其他常见的DBMS通常支持强类型的数据,也就是每一列的类型都必须预先指定,但是SQLite采用的是弱类型的字段。实际上,其内部仅有下列五种存储类型:

NULL:表示一个NULL值

INTEGER:用来存储一个整数,根据大小可以使用1,2,3,4,6,8位来存储.

REAL:IEEE浮点数

TEXT:按照字符串来存储

BLOB:按照二进制值存储,不做任何改变.

要注意,这些类型是值本身的属性,而不是列的属性.

但是为了和其他DBMS(以及SQL标准)兼容,在其createtable语句中可以指定列的类型,为此,SQLite有个列相似性的概念(ColumnAffinity).列相似性是列的属性,SQLite有以下几种列相似性:

TEXT:TEXT列使用NULL,TEXT或者BLOB存储任何插入到此列的数据,如果数据是数字,则转换为TEXT.

NUMERIC:NUMERIC列可以使用任何存储类型,它首先试图将插入的数据转换为REAL或INTEGER型的,如果成功则存储为REAL和INTEGER型,否则不加改变的存入.

INTEGER:和NUMERIC类似,只是它将可以转换为INTEGER值都转换为INTEGER,如果是REAL型,且没有小数部分,也转为INTEGER

REAL:和NUMERIC类型只是它将可以转换为REAL和INTEGER值都转换为REAL.

NONE:不做任何改变的尝试.

SQLite根据createtable语句来决定每个列的列相似性.规则如下(大小写均忽略):

1.如果数据类型中包括INT,则是INTEGER

2.如果数据类型中包括CHAR,CLOB,TEXT则是TEXT

3.如果数据类型中包括BLOB,或者没有指定数据类型,则是NONE

4.如果数据类型中包括REAL,FLOA或者DOUB,则是REAL

5.其余的情况都是NUMERIC

由上可知,对于sqlite来说char,varchar,nchar,nvarchar等都是等价的,且后面最大长度也是没有意义的。但是对于其他DBMS却不是相同的。另外,列相似性仅仅是向Sqlite提出了一个存储数据的建议,即使实际存储的数据类型和列相似性不一致,SQLite还是可以成功插入的,下面给出一个例子来说明下以上论述,注意,这个例子需要在SQLite的命令行下运行,如果在SQLiteExpert工具下执行,SQLite会进行一些额外的处理。

相关推荐