forlong401的专栏--有问题上:http://www.androidren.com

Android and iOS Now! 多交流技术,多分享,技术只有分享,才会经久不衰。 欢迎关注新浪微博:@forlong401 。http://weibo.com/forlong401...

SQLite支持那些数据类型

http://forlong401.com/?p=1317

http://androidren.com/index.php?qa=300&qa_1=sqlite%E6%94%AF%E6%8C%81%E9%82%A3%E4%BA%9B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B

由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型。所以如果想知道SQLite支持那些数据类型,需要先弄清楚:动态数据类型和静态数据类型的区别。

动态数据类型:数据库存储的数据类型和数据输入的类型是动态匹配的,简言之,定义了一个数据库字段为字符串TEXT类型,你也可以存入整型INTEGER的数据。

静态数据类型:数据库存储的数据类型和数据输入的类型要求是一致的。简言之,字段可以存储的数据类型是在表声明时即以确定的。

因此,SQLite和传统关系型数据库它们之间在数据存储方面还是存在着很大的差异。

在SQLite中,存储分类和数据类型也有一定的差别。SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。这种关系就体现在存储类型和数据类型的转换上,而这种关系映射是使用了Type Affinity的概念。

SQLite的存储类型有下面五种:

存储类 描述
NULL 值是一个 NULL 值。
INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
BLOB 值是一个 blob 数据,完全根据它的输入存储。

SQLite的Type Affinity有下面五种:

SQLite 支持列上的类型 affinity 概念。任何列仍然可以存储任何类型的数据,但列的首选存储类是它的 affinity。在 SQLite3 数据库中,每个表的列分配为以下类型的 affinity 之一:

Affinity 描述
TEXT 该列使用存储类 NULL、TEXT 或 BLOB 存储所有数据。
NUMERIC 该列可以包含使用所有五个存储类的值。
INTEGER 与带有 NUMERIC affinity 的列相同,在 CAST 表达式中带有异常。
REAL 与带有 NUMERIC affinity 的列相似,不同的是,它会强制把整数值转换为浮点表示。
NONE 带有 affinity NONE 的列,不会优先使用哪个存储类,也不会尝试把数据从一个存储类强制转换为另一个存储类。

下面就是传统关系型数据库数据类型和Type Affinity映射的规则:

Example Typenames From The

CREATE TABLE Statement

or CAST Expression

Resulting Affinity Rule Used To Determine Affinity
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

no datatype specified

NONE 3
REAL

DOUBLE

DOUBLE PRECISION

FLOAT

REAL 4
NUMERIC

DECIMAL(10,5)

BOOLEAN

DATE

DATETIME

NUMERIC 5

结论:

SQLite支持那些数据类型:都支持。但是,为了保持逻辑一致性、可移植和简单维护性,建议:定义数据表的字段时使用和SQLite支持的数据存储类型一致的类型。简言之,你就将你的数据类型一一对应到下面的数据类型最好:

存储类 描述
NULL 值是一个 NULL 值。
INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
BLOB 值是一个 blob 数据,完全根据它的输入存储。

参考:

http://androidren.com/index.php?qa=300&qa_1=sqlite%E6%94%AF%E6%8C%81%E9%82%A3%E4%BA%9B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B

http://sqlite.org/datatype3.html

Each value stored in an SQLite database (or manipulated by the database engine) has one of the following storage classes:

  • 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-16LE).
  • BLOB. The value is a blob of data, stored exactly as it was input.

阅读更多
个人分类: Android database
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭