SQLite数据类型

转载 2016年05月31日 16:37:29

一、存储种类和数据类型:

    SQLite将数据值的存储划分为以下几种存储类型:
     NULL: 表示该值为NULL值。
     INTEGER: 无符号整型值。
     REAL: 浮点值。
     TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
     BLOB: 存储Blob数据,该类型数据和输入数据完全相同。
    由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型是在表声明时即以确定的,因此它们之间在数据存储方面还是存在着很大的差异。在SQLite中,存储分类和数据类型也有一定的差别,如INTEGER存储类别可以包含6种不同长度的Integer数据类型,然而这些INTEGER数据一旦被读入到内存后,SQLite会将其全部视为占用8个字节无符号整型。因此对于SQLite而言,即使在表声明中明确了字段类型,我们仍然可以在该字段中存储其它类型的数据。然而需要特别说明的是,尽管SQLite为我们提供了这种方便,但是一旦考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的一致性。除非你有极为充分的理由,同时又不再考虑数据库平台的移植问题,在此种情况下确实可以使用SQLite提供的此种特征。
   1. 布尔数据类型:
    SQLite并没有提供专门的布尔存储类型,取而代之的是存储整型1表示true,0表示false。

   2. 日期和时间数据类型:
    和布尔类型一样,SQLite也同样没有提供专门的日期时间存储类型,而是以TEXT、REAL和INTEGER类型分别不同的格式表示该类型,如:
    TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
    REAL: 以Julian日期格式存储
    INTEGER: 以Unix时间形式保存数据值,即从1970-01-01 00:00:00到当前时间所流经的秒数。

二、类型亲缘性:

    为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。SQLite目前的版本支持以下五种亲缘类型:

亲缘类型 描述  
TEXT 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
NUMERIC 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。
INTEGER 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。
NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。  

   1. 决定字段亲缘性的规则:
    字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。
    1). 如果类型字符串中包含"INT",那么该字段的亲缘类型是INTEGER。
    2). 如果类型字符串中包含"CHAR"、"CLOB"或"TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR。
    3). 如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE。
    4). 如果类型字符串中包含"REAL"、"FLOA"或"DOUB",那么该字段的亲缘类型是REAL。
    5). 其余情况下,字段的亲缘类型为NUMERIC。

    2. 具体示例:

声明类型 亲缘类型 应用规则
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INTEGER 1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB NONE 3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL 4
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
NUMERIC 5

    注:在SQLite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。

三、比较表达式:

    在SQLite3中支持的比较表达式有:"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。
    数据的比较结果主要依赖于操作数的存储方式,其规则为:
    1). 存储方式为NULL的数值小于其它存储类型的值。
    2). 存储方式为INTEGER和REAL的数值小于TEXT或BLOB类型的值,如果同为INTEGER或REAL,则基于数值规则进行比较。
    3). 存储方式为TEXT的数值小于BLOB类型的值,如果同为TEXT,则基于文本规则(ASCII值)进行比较。
    4). 如果是两个BLOB类型的数值进行比较,其结果为C运行时函数memcmp()的结果。

四、操作符:

    所有的数学操作符(+, -, *, /, %, <<, >>, &, and |)在执行之前都会先将操作数转换为NUMERIC存储类型,即使在转换过程中可能会造成数据信息的丢失。此外,如果其中一个操作数为NULL,那么它们的结果亦为NULL。在数学操作符中,如果其中一个操作数看上去并不像数值类型,那么它们结果为0或0.0。

Sqlite 数据类型 总结

sqlite 数据类型 总结 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型: 1.NULL:空值。 2.INT...
  • candyguy242
  • candyguy242
  • 2012年11月29日 10:58
  • 939

SQLite 3 中的数据类型

SQLite使用动态类型系统,在SQLite中,值的数据类型和值本身,而不是和它的容器,关联在一起的。SQLite的动态类型系统和其他数据库引擎的静态类型系统是兼容的,这样在静态类型的数据库上执行的S...
  • u012917700
  • u012917700
  • 2017年03月03日 09:19
  • 246

SQLite支持那些数据类型

http://forlong401.com/?p=1317 http://androidren.com/index.php?qa=300&qa_1=sqlite%E6%94%AF%E6%8C%81%...
  • forlong401
  • forlong401
  • 2015年02月12日 11:52
  • 6556

利用Sqlite数据库的blob类型存储自定义的数据类型(小寿转载)

sqlite数据库的其他作用在这里就不阐述了,直接进入正题吧! 如何利用sqlite数据库的blob类型存取自定义的数据类型,本人苦苦挣扎了一天,在网上搜了个遍也没找着看起来似乎有用的介绍,所以本人...
  • u011676589
  • u011676589
  • 2014年06月30日 11:48
  • 2315

Android学习笔记七:sqlite3中的数据类型

出处:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2137000.html 大多数的数据库引擎(到现在据我们所知的除了sqlite...
  • wuhenyouyuyouyu
  • wuhenyouyuyouyu
  • 2016年05月13日 10:30
  • 1527

【数据库】 sqlite3数据类型和函数

sqlite3支持的数据类型: NULL、INTEGER、REAL、TEXT、BLOB 但是,sqlite3也支持如下的数据类型 smallint           16位整数 intege...
  • XiaoMT_Rush
  • XiaoMT_Rush
  • 2011年09月10日 21:42
  • 8702

sqlite 的数据类型 与 python 的数据类型

sqlite 数据类型 转载自:http://blog.csdn.net/zanfeng/article/details/17436381 一般数据采用的固定的静态数据类型,而SQLi...
  • lengyff
  • lengyff
  • 2015年04月16日 16:22
  • 2537

android sqlite 数据库存贮类型 long double floate 等 数据类型

INTEGER –整数,对应Java 的byte、short、int 和long。REAL – 小数,对应Java 的float 和double。TEXT – 字串,对应Java 的String。...
  • a2241076850
  • a2241076850
  • 2017年04月07日 13:09
  • 2058

Sqlite3中存储类型和数据类型结合文档解析。

sqlite3是个很小的数据库,运行在手机,机顶盒上....那它就不可能像musql,sqlserver那么规范,有很多的数据类型,之前我也以为它定义了很多数据类型,其实不是他就5个存储类,那么多数据...
  • jycboy
  • jycboy
  • 2015年08月05日 16:08
  • 1919

修改sqlite字段类型

在单机版部署的环境中,在软件升级时,对数据库的修改一般是用 SQL 语句来实现(不可能叫客户用 SQLite Expert 自己修改吧),本来用 SQL 语句修改字段不是啥复杂的事,举例如下: --...
  • guofuyou
  • guofuyou
  • 2013年11月24日 13:17
  • 1230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLite数据类型
举报原因:
原因补充:

(最多只允许输入30个字)