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.

时间: 2024-08-02 21:10:55

SQLite支持那些数据类型的相关文章

android sqlite支持的数据类型

Sqlite3支持的数据类型 :NULL.INTEGER.REAL.TEXT.BLOB 但实际上,sqlite3也接受如下的数据类型:    smallint 16 位元的整数.    interger 32 位元的整数.    decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数.如果没有特别指定,则系统会设为 p=5; s=0 .    float  32位元的实数.    double  64位元的实数.   

SQLite剖析之数据类型

许多SQL数据库引擎(除SQLite之外的各种SQL数据库引擎)使用静态.严格的数据类型.对于静态类型,一个值的数据类型由它的容器,即存储这个值的列来决定.SQLite则使用更加通用的动态类型系统.在SQLite中,一个值的数据类型被关联到这个值本身,而不是它的容器.SQLite的动态类型系统向后兼容一般静态类型系统的数据库引擎.在某种意义上,工作在静态类型数据库上的SQL声明也同样能工作在SQLite上.但是SQLite动态类型还允许做一些在传统严格类型的数据库中不能做的事情. 一.存储类别及

[转]SQLite支持字段类型及建表

转自:http://boonya.iteye.com/blog/2118252 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断. SQLite具有以下五种数据类型: 1.NULL:空值. 2.INTEGER:带符号的整型,具体取决有存入数字的范围大小. 3.REAL:浮点数字,存储为8-byte IEEE浮点数. 4.TEXT:字符串文本. 5.BLOB:二进制对象. 但实际上,sqlite3也接受如下的数据类型: smallint 16 位元的整数.

myasql支持的数据类型以及函数转换

myasql支持的数据类型 1.数值类型 tinyint 1 小整数 smallint 2 大整数 mediumint 3 大整数 int 4 大整数 bigint 8 极大整数 如果插入 的较大较小 会自动改编为范围值 多余的数截取 float 4 double 8 decimal 默认是10 可以指定多少个整数和小数 2.字符串类型 char 0-255字节 定长字符串 varchar 0-255字节 变长字符串 tinyblob 0-255字节 不超过255个字符的二进制字符 tintex

初识Redis系列之三:Redis支持的数据类型及使用

支持的数据类型有五种: string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合): 下面分别对这几种类型进行简单的Redis存取操作 1:string(字符串) 几种里面最常用,也是最简单的类型,使用方式如下: redis 127.0.0.1:6379> SET name "runoob" OK redis 127.0.0.1:6379> GET name "runoob" 注意:一个键最大能

mongodb文档支持的数据类型

1. 存储类型 mongodb文档类似于json,但不是完全的json. json只有六种类型:null, bool, 数字,字符串,数组,对象. 但是mongo的文档在json的基础上还扩展了几种类型, 比如,日期类型,整数,浮点数. mongodb真正存储在磁盘上是使用bson(binary json). 2. 常用数据类型 null: 表示不存在或空值. bool : true 和 false. string: 字符串, 用引号包含. 3. 数字 json中只有数字类型. 而mongodb

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系.

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系. The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single. https://msdn.microsoft.com/zh-cn/library/s

SQLServerException: 不支持“variant”数据类型

通过jdbc链接数据上SqlServer数据库,其中单个执行sql是没有问题的,但执行下列的executeQuery方法 // 对象集 ResultSet resultList = stm.executeQuery(sb.toString()); 提示错误:com.microsoft.sqlserver.jdbc.SQLServerException: 不支持"variant"数据类型 原因: 是由于SqlServer的JDBC的缺陷, 需要强制转换. 改前: SELECT SERVE

MySQL知识树-支持的数据类型

本篇学习笔记的主要内容: 介绍MySQL支持的各种数据类型(常用),并讲解其主要特点.   MySQL支持多种数据类型,主要包括数值类型.日期和时间类型.字符串类型. 数值类型 MySQL的数值类型包括整数类型.浮点数类型.定点数类型.位类型. 整数类型 MySQL支持的整数类型有tinyint.smallint.mediumint.int.bigint(范围从小到大). zerofill 我们在定义整数类型时可以在类型名称后面的小括号内指定显示宽度,例如int(5),当插入的数值宽度小于5位时