rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 数据库 » SQLite

Sqlite的数据类型

sqlite数据类型

数据库中存储的每个值都有一个属性,都属于下面所列类中的一种,(被数据库引擎所控制)

sqlite中真正的存储类型有以下五种:

      NULL.    The value is a NULL value.
      INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
      REAL.    The value is a floating point value, stored as an 8-byte IEEE floating point number.
      TEXT.    The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16-LE).
      BLOB.    The value is a blob of data, stored exactly as it was input.

在实际中,我们所定义的各种各样的数据类型都会相应的转换为以上五种类型。

比如varchar,small int等这些类型描述只是为Column Affinity提供建议,不是必须的。比如Sqlite看到类型声明包含INT他就认为这个字段应该以INTEGER类型存储,实际中你可以给它赋任何类型的值,只不过都会被适当转换为INTEGER存储,像C的unsigned long(假设32位平台)仍然可以用4 bytes的INTEGER存储,至于使用时要解释为signed long或unsigned long都是由你决定的。

sqlite网站的描述(不过有的我还看不懂):

Each value stored in an SQLite数据库中存储的每个值都有一个属性,都属于下面所列类中的一种,(被数据库引擎所控制)

.这个值为空值

整数.值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.

实数. 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

文本. 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB. 值是BLOB数据,如何输入就如何存储,不改变格式.

像SQLite2.0版一样,在3.0版中,除了INTEGER PRIMARY KEY,数据库中的任何列都可以存储任何类型的数据.这一规则也有例外,在下面的"严格相似模式"中将描述.

输入SQLite的所有值,不管它是嵌入 SQL语句中的文字还是提前编译好的绑定在SQL语句中的值,在SQL语句执行前都被存储为一个类.在下面所描述的情况下,数据库引擎将在执行时检查并把值在数字存储类(整数和实数)和文本类间转换.

存储的类别最初被分类为如下:

具体的值比如SQL语句部分的带双引号或单引号的文字被定义为文本,如果文字没带引号并没有小数点或指数则被定义为整数,如果文字没带引号但有小数点或指数则被定义为实数,如果值是空则被定义为空值.BLOB数据使用符号X'ABCD'来标识.

Values supplied using the 被输入的值使用sqlite3_bind_* APIs的被分类一个存储等级,这等级是和原来的类基本相一致的. (比如sqlite3_bind_blob()绑定一个BLOB的值).

值的分类是SQL分等级操作的结果,决定于最远的操作表达式.用户定义的功能也许会把值返回任意的类.在编译的时候来确定表达式的存储类基本是不可能的.

SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎. SQLite支持常见的数据类型, 如:

CREATE TABLE ex2
(
  a VARCHAR(10),
  b NVARCHAR(15),
  c TEXT,
  d INTEGER,
  e FLOAT,
  f BOOLEAN,
  g CLOB,
  h BLOB,
  i TIMESTAMP,
  j NUMERIC(10,5)
  k VARYING CHARACTER (24),
  l NATIONAL VARYING CHARACTER(16)
);

decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。

double 64位元的实数。

char(n) n 长度的字串,n不能超过 254。

 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。

graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。

vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000

date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒。

timestamp 包含了 年、月、日、时、分、秒、千分之一秒。

sqlite3的支持“生活中的”数据类型有: NULL、BLOB、INTEGER、REAL、TEXT 我说它是“生活中的数据类型”,因为怕它和下面的column类型(sqlite只有四种)相混乱。 注意:sqlite的所有类型都会根据实现输入变化的。

TEXT过程:把所有插入的数据转换为TEXT存入数据库。

NUMERIC把转换过程:INTEGER、REAL、TEXT INTEGER过程:INTEGER、TEXT

REAL过程:REAL、TEXT

NONE过程:数据库本身就是这个none值的。

由于sqlite3只有两个类型,所以如果你声明为其它的类型,sqlite3会自动把它转换类型: INT就是INTEGER. CHAR、CLOB、TEXT、VARCHAR都为TEXT. BLOB为NONE. REAL、DOUB、FLOAT都为REAL 其它的为NUMERIC. 

 SQLite第三版中的数据类型 1.存储类别 第二版把所有列的值都存储成ASCII文本格式。第三版则可以把数据存储成整数和实数,还可以存储BLOB数据.

顶一下
(0)
踩一下
(1)