`

SQLite数据类型

阅读更多
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还是可以成功插入的,下面给出一个例子来说明下以上论述,注意,这个例子需要在SQLite的命令行下运行,如果在SQLite Expert工具下执行,SQLite会进行一些额外的处理。要注意SQLite的这种特性可能会给SQLite的ADO驱动造成一些麻烦,因为.NET 都是强类型的语言,必须把数据库中的字段转换为合适的类型,所以在插入数据的时候,还是应该严格的按照create table中的定义插入数据。

  (2)自增列

  在SQL Server中,只需要指定identity(1,1)就可以设定自增列,但是在SQLite中不支持这样做。在SQLite中,任何一张表都有一个字段类型是Integer,且是自增的,这个列是作为B树的索引的,它的名字是ROWID,如下图所示:

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

  注意上面例子的最后3条语句,它显示了SQLite默认的自增列算法是在当前表中最大的数再加1,这样可能导致的结果是ID被重复使用——当最后一条数据被删除的时候。这与SQL Server的Identity列的行为是不一致的,例如:

  SQL Server会记住每一次插入的序号,哪怕它已经被删除了。要实现SQL Server 这样的效果,需要使用autoincrement关键字。如下例所示:

  不过 autoincrement关键字不被SQL Server支持(我不知道SQL 92标准中是否有此关键字),同样SQL Server的 indentity关键字在SQLite中也无法使用,因为SQLite只要求声明类型必须是integer才可以启用自增列。所以,我想不出什么方法能使建库的脚本能够不加修改的被两种数据库使用。

  (3) 日期函数

  Sqlite的日期函数比较有特色,它的使用本质上是调用C的库函数strftime,基本使用方法如下:

  (4) 不被支持的特性

  用户自定义函数,存储过程

  外键的约束(不过可以通过自定义触发器来替代)

  right out join , full out join

  grant revoke
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    sqlite数据类型详细介绍+javaJDBC连接sqlite小例子

    以上就是SQLite数据类型和使用Java JDBC连接SQLite的基本知识。通过这些概念,你可以开始编写自己的SQLite数据库应用,实现数据的存储和查询。在实际开发中,还可以利用PreparedStatement进行参数化查询,提高代码...

    sqlite数据类型

    sqlite数据类型说明 .

    SQLite:SQLite数据类型与基本语法.docx

    SQLite:SQLite数据类型与基本语法

    C#与SQLServer、SQLite之间的数据类型对应表

    通过该对应表可以方便的创建跟代码类型一致的不同数据库,尤其适用于使用EntityFramework进行C#程序开发的技术人员,可以方便的创建跨数据库操作。

    Sqlite3支持的数据类型

    SQLite支持多种数据类型,这些数据类型对于理解和有效地使用SQLite数据库至关重要。下面将详细介绍SQLite3支持的数据类型及其特性。 1. NULL(空值) SQLite中的NULL类型代表一个未知或未定义的值。它不同于其他...

    SQLite_sqlitec#_

    8. **类型映射**: SQLite 自动处理大多数 .NET 数据类型到 SQLite 数据类型的转换。例如,`DateTime` 映射为 `TIMESTAMP`,`int` 映射为 `INTEGER`。 9. **设计模式**: 在实际开发中,ORM(对象关系映射)框架如 ...

    System.Data.SQLite(32、64通用版本)

    3. **数据类型映射**:System.Data.SQLite提供了.NET数据类型与SQLite数据类型的自动映射,例如,将.NET的`DateTime`映射为SQLite的`TIMESTAMP`,使得数据交互更加便捷。 4. **异步支持**:随着异步编程在.NET中的...

    SQLite3中的数据类型

    在SQLite3中,数据类型的设计与许多其他数据库系统有所不同,它具有灵活性且易于理解。下面将详细介绍SQLite3中的数据类型及其特点。 1. NULL类型 SQLite3允许字段值为NULL,这意味着没有任何值。NULL并不是一种...

    64位System.Data.SQLite.dll

    2. 数据类型映射:System.Data.SQLite将.NET数据类型与SQLite数据类型进行了映射,例如,.NET的Int32对应SQLite的INTEGER,String对应TEXT等。 3. 支持事务:通过Transaction对象,开发者可以在SQLite数据库中执行...

    SQlite数据库笔记总结详解

    2. SQLite数据类型: - NULL:表示空值。 - INTEGER:整数,可自动转换为BIGINT、INTEGER、SMALLINT或TINYINT。 - REAL:浮点数,等同于DOUBLE PRECISION或FLOAT。 - TEXT:文本字符串。 - BLOB:二进制大对象...

    sqlite3实验指导书

    首先,文档中提到了SQLite数据类型的细节。SQLite的数据类型比较灵活,实际上它不强制数据类型,允许存储任何类型的数据到任何列中。尽管如此,为了使用数据类型的好处,如提高效率和易于理解,SQLite定义了以下几种...

    sqlite3数据库使用基础讲解

    #### 一、SQLite 数据类型概述 SQLite 是一款轻量级的嵌入式数据库引擎,与其他大多数 SQL 数据库不同,它采用了一种更加灵活的动态类型系统。这意味着数据值的类型与其实际内容相关联,而非仅仅依赖于其所在的容器...

    devart.dotConnect for SQLite v1.00

    4. **类型映射**:`dotConnect for SQLite` 自动将 .NET 类型与 SQLite 数据类型进行映射,确保数据在 .NET 应用程序和数据库之间无缝转换。例如,`System.DateTime` 对应 SQLite 的 DATETIME 类型。 5. **事务处理...

    System.Data.SQLite.dllSystem.Data.SQLiteSystem.Data.SQLite.dll

    7. **数据类型映射**:将.NET数据类型转换为SQLite数据类型,反之亦然。 在开发过程中,若缺少System.Data.SQLite.dll文件,会导致.NET应用程序无法正常连接和操作SQLite数据库。因此,确保该文件在项目引用中是至...

    Sqlite_Class.rar_class_sqlite_sqlite class_sqlite 类_sqlite3x_con

    类库需要提供数据类型转换机制,以便于 C++ 类型与 SQLite 数据类型之间的转换。 8. **数据库元数据访问**:可能包含获取表信息、索引信息以及列信息的方法,帮助开发者了解数据库结构。 9. **游标(Cursor)操作*...

    SQLite语法(HTML版)

    一、SQLite数据类型 SQLite支持五种基本数据类型:NULL、INTEGER、REAL、TEXT和BLOB。NULL表示空值;INTEGER用于存储整数,可自动适配大小,如INT、BIGINT等;REAL是浮点数,相当于其他数据库中的FLOAT或DOUBLE;...

    sqlite-amalgamation-3080803.zip_sqlite

    3. **SQLite 数据类型**:SQLite支持多种数据类型,如NULL、INTEGER、REAL、TEXT和BLOB,这些数据类型可以灵活适应不同的存储需求。开发者需要了解每种类型的特点和适用场景。 4. **SQL语法**:SQLite遵循SQL标准,...

    SQLite关系型数据库的使用

    #### 六、SQLite数据类型 SQLite支持五种数据类型: 1. **NULL**:表示空值。 2. **INTEGER**:整数类型,根据值的大小自动调整存储空间。 3. **REAL**:浮点数类型,存储为8字节。 4. **TEXT**:文本字符串类型,...

    android sqlite

    SQLite数据类型采用动态数据类型,会根据存入值的类型自动判断。基本数据类型包括:NULL、INTEGER、REAL、TEXT和BLOB。其中,VARCHAR是TEXT类型的一个子集,它是一个长度可变的字符串类型。SQLite的操作语句比较简单...

    SQLite入门与分析

    三、SQLite数据类型 SQLite支持多种数据类型,包括NULL、INTEGER、REAL、TEXT和BLOB。NULL表示值未知或未定义;INTEGER用于整数,可以存储非常大的数值;REAL是浮点数;TEXT用于存储文本数据,支持多种编码;BLOB...

Global site tag (gtag.js) - Google Analytics