SQLITE数据类型

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

NULL: 表示一个NULL值

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

REAL: IEEE浮点数

TEXT: 按照字符串来存储

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

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

但是为了和其他DBMS(以及SQL标准)兼容,在其create table语句中可以指定列的类型,为此,SQLite有个列相似性的概念(Column Affinity). 列相似性是列的属性,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根据create table语句来决定每个列的列相似性.规则如下(大小写均忽略):

  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还是可以成功插入的.

下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的亲和类型(列相似性)

自增列

在SQLite中,任何一张表都有一个字段类型是Integer,且是自增的,这个列是作为B树的索引的,它的名字是ROWID.

加入某表虽然只有一列,但是ROWID列还是存在的。在程序中对任何一张表都可以使用ROWID作为自增列。不过这样可能导致和其他数据库的不兼容,SQLite中如果一个列的声明类型是Integer,并且是主键,那么这个列的名字就成为ROWID的别名。注意,声明类型必须是 Integer,而不能是int或bigint之类

Boolean 数据类型

SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

Date 与 Time 数据类型

SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

存储类日期格式

TEXT:格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。

REAL:从公元前 4714 年 11 月 24 日格林尼治时间正午开始算起的天数。

INTEGER:从 1970-01-01 00:00:00 UTC 算起的秒数。

您可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。

Example1

private static final String CREATE_TABLE_EXPRESS_COMPANY ="create table "+TABLE_EXPRESS_COMPANY+"("

+ExpressCompany.Field._id +"integer primary key autoincrement, "

+ ExpressCompany.Field._code+" TEXT, "

+ ExpressCompany.Field._name+" TEXT);";

Example2:

private static final String sql ="create table diary"+"("

+"_id integer primary key autoincrement,"

+"topic varchar(100),"

+"content varchar(1000)"+")";

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方文档:http://www.sqlite.org/datatype3.html#affinity 绝大多数数据...
    liboxiang阅读 6,701评论 1 1
  • 什么是SQLite?数据库存储数据的步骤 ●SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备...
    飞行的猫阅读 2,562评论 1 7
  • 转载,觉得这篇写 SQLAlchemy Core,写得非常不错。不过后续他没写SQLAlchemy ORM... ...
    非梦nj阅读 5,529评论 1 14
  • 官网:http://www.sqlite.org/lang.html (他人的中文翻译http://blog.cs...
    liboxiang阅读 3,950评论 0 6
  • 说明 本文是作者Lefe所创,转载请注明出处,如果你在阅读的时候发现问题欢迎一起讨论。本文会不断更新。 正文 对于...
    Lefe阅读 4,065评论 1 18