SQLite列类型学习

发布时间:2020-09-21编辑:脚本学堂
SQLite采用的是弱类型的数据。SQLite 2.0版本把所有列的值都存储成ASCII文本格式;SQLite 3.0版本支持更多的数据类型。

sqlite与其他数据库最大不同是它对数据类型的支持,其他常见数据库支持强类型的数据,即必须指定每一列具体的、严格的数据类型。但SQLite采用的是弱类型的数据。SQLite 2.0版本把所有列的值都存储成ASCII文本格式;SQLite 3.0版本支持更多的数据类型。

每个数据值本身的数据类型可以是下列五种类型对象之一:
(1)NULL,空值;
(2)INTEGER,整型,根据大小使用1、2、3、4、6、8个字节来存储;
(3)REAL,浮点型,用来存储8个字节的IEEE浮点;
(4)TEXT,文本字符串,使用UTF-8、UTF-16、UTF-32等保存数据;
(5)BLOB(Binary Large Objects),二进制类型,按照二进制存储,不做任何改变。

为了增强SQLite数据库和其他数据库列类型的兼容性,SQLite支持列的"类型亲和性"。列的亲和性是为该列所存储的数据建议一个类型(注意:是建议而不是强迫)。理论上讲,任何列依然可以存储任何类型的数据;只是针对某些列,如果给出了建议类型,数据库将按建议的类型先转换再存储,这个被优先使用的数据类型则被称为"亲和类型"。

在SQLite3.0版中数据库中的列类型有五种类型亲和性:文本类型、数字类型、整数类型、浮点类型、NULL无类型。
(1)一个具有文本类型亲和性的列,可以使用NULL、TEXT、BLOB值类型存储数据。比如数字数据被插入一个具有文本类型亲和性的列,在存储之前数字将被转换成文本。
(2)一个具有数字类型亲和性的列,可以使用NULL、INTEGER、REAL、TEXT、BLOB五种值类型保存数据。比如一个文本类型数据被插入到一个具有数字类型亲和性的列,在存储之前将被转变成整型或浮点型。
(3)一个具有整数亲和性的列,在转换方面和具有数字亲和性的列是一样的,但也有些区别,比如浮点型的值,将被转换成整型。
(4)一个具有浮点亲和性的列,可以使用REAL、FLOAT、DOUBLE值类型保存数据。
(5)一个具有无类型亲和性的列,不会选择用哪个类型保存数据,数据不会进行任何转换。

一个列的亲和类型是由该列所宣称的类型决定的,遵守以下规则:
(1)如果列的数据类型包括字符串"INT",它被定义为具有整数型亲和性;
(2)如果列的数据类型包括字符串"CHAR"、"CLOB"、"TEXT",它被定义为具有文本亲和性(注意:VARCHAR类型包括字符串"CHAR",因此具有文本类型亲和性);
(3)如果列的数据类型包括字符串"BLOB",或没有指定类型,它被定义为无类型亲和性;
(4)如果列的数据类型包括字符串"REAL"、"FLOA"、"DOUB",它被定义为浮点型亲和性;
(5)其他的都被定义为数字型亲和性。

img1

TEXT存储可变长度的数据,最大长度为2^31-1(2,147,483,647)个字符。

设置主键使用INTEGER PRIMARY KEY,不能用INT。自动增加是AUTOINCREMENT,不同于mysql的AUTO_INCREMENT。