sqlite3使用动态类型而不是静电类型,这与其他风格的sql形成了鲜明对比.这SQLite website人写道:

大多数SQL数据库引擎(据我们所知,除了SQLite之外的所有SQL数据库引擎)都使用静态的、严格的类型.使用静态类型时,值的数据类型由其容器(存储该值的特定列)确定.

SQLite使用更通用的动态类型系统.在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联.

在我看来,这正是您don't想要的,因为它允许您存储,例如,在整数列中存储字符串.

页面继续:

SQLite中的动态类型允许它做一些在传统的严格类型数据库中不可能做的事情.

我有两个问题:

  1. 用例问题:SQLite3的动态类型有哪些有益的例子?
  2. 历史/设计问题:用动态类型实现SQLite的动机是什么?

推荐答案

This is called type affinity in SQLite.

据SQLite网站称,他们这样做是为了"最大限度地提高SQLite和其他数据库引擎之间的兼容性"(见以上链接)

SQLite支持列上的"类型关联"概念.列的类型关联性是存储在该列中的数据的推荐类型.这里的重要思想是该类型是推荐的,而不是必需的.任何列仍然可以存储任何类型的数据.只是如果可以 Select ,某些列将更喜欢使用一个存储类而不是另一个存储类.列的首选存储类称为其"亲和性".

我的理解是SQLite就像它的名字一样--一个非常轻量级、简约的数据库引擎.与强类型相关的开销可能超出了项目的范围,最好留给使用SQLite的应用程序.

但是,根据他们的网站,他们这样做是为了最大限度地与其他DB引擎兼容.

Database相关问答推荐

在使用FT.AGGREGATE聚合数据时,如何在Redis上解析ISO 8601时间?

Sequel Pro / MAMP 在哪里存储本地数据库?

H2 - 如何截断(truncate)所有表?

PostgreSQL WHERE IN LIKE 查询

通过 mySQL 命令行直接上传图片

Mysql - 在所有数据库中查找表

聊天的数据库模式:私有和群组

某些网站不允许在密码中使用句点是否有原因?

如何在 DB2 的单个更新语句中更新多个列

Boxed与原始类型作为实体 id

执行语句还是运行脚本?

我应该如何使用 MySQL 构建我的设置表?

在 SQL Server 中,如何以类似于 Oracle 的SELECT FOR UPDATE WAIT的方式锁定单行?

PostgreSQL 哈希索引

Sqlite 判断表是否为空

显式事务回滚是否必要?

为什么 DBMS 不支持 ASSERTION

什么是提交日志(log)?

遍历数据库中的每条记录 - Ruby on Rails / ActiveRecord

数据库 - (行或记录、列或字段)?