数据类型

来源:互联网 发布:论坛系统的数据库设计 编辑:程序博客网 时间:2024/04/28 15:06

一、数据类型
 SQLite3 支持五种数据类型。NULL,INTEGER,REAL,TEXT,BLOB
 NULL:是一个NULL值
 INTEGER:是一个有符号的整数,可以是1,2,3,4,6 或者 8 字节,取决于所存值的数量级
 REAL:是一个实数,是一个8字节的IEEE实数
 TEXT:是文本字符串,以数据库编码形式存储(UTF-8, UTF-16BE or UTF-16-LE)
 BLOB:是一个BLOB类型,以输入的形式存储
 

 任何一个列都可以存储任何类型的数据,除了INTEGER PRIMARY KEY 审明的列。
 
 所有提交给SQLite的值在执行前都会被赋于一种数据类型。规则如下:
  1、写在SQL语句中,用单引号或双引号括起来的,被赋于TEXT类型。没有单引号或双引号的数字,并且也没有小数点和指数的被赋于
    INTEGER。没有单引号或双引号的数字,有小数点或指数的被赋于REAL。如果值是NULL,则被赋于NULL。以X'ABCD'指定的文本被
    赋于BLOB。
  2、以sqlite3_bind_* 接口提交的被赋于同所用接口相同的类型。
  
二、列的亲合类型
 在SQLite3中,值的类型和值本身是相关联的,而不是值所在的列或变量。
 为了使SQLite3有最大的兼容性,SQLite3支持列类型亲合类型(column type affinity)。列的类型亲合类型是指SQLite给列中存储的数据
 推荐一种类型,是推荐,而不是强制的。理论上任何列可以存储任何类型的数据。可以给一些列默认推荐一个优先的类型,这个优先
 类型就是亲合类型。
 SQLite3 中提供五种亲合类型。TEXT,NUMERIC,INTEGER,REAL,NONE。
 TEXT:存储NULL,TEXT,BLOB类型的数据。如果所要存的值是数字的,将先被转换成TEXT,再存储
 NUMERIC:能存所有的数据类型。当一个TEXT数据被存入时,先试图将其转换成INTEGER或REAL,成功则按INTEGER或REAL存储,否则按TEXT
 存储,对于NULL和BLOB类型不做任何转换。
 INTEGER:规则和NUMERIC一样,但对于浮点型要转换成INTEGER。
 REAL:规则和NUMERIC一样,但对于INTEGER要转换成REAL
 NONE:存储将不做任何转换
 
 
三、列亲合类型的确定
 规则如下:
 1、如果类型审明部分包括INT则有INTEGER亲合类型 
 2、如果类型审明部分包括CHAR,CLOB,TEXT有TEXT亲合类型,VARCHAR也是
 3、如果类型审明部分包括BLOB或者没有类类型审明,则有NONE亲合类型
 4、如果类型审明部分包括REAL,FLOA,DOUB则有REAL亲合类型
 5、其它情况则视为NUMERIC亲合类型
 使用"CREATE TABLE <table> AS SELECT..." 语句建的表的各列是NONE亲合类型