23

与其他风格的 SQL 相比,SQLite3 使用动态类型而不是静态类型。SQLite 网站内容如下:

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

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

在我看来,这正是您想要的,因为它允许您将字符串存储在整数列中。

页面继续:

... SQLite 中的动态类型允许它完成传统刚性类型数据库中不可能完成的事情。

我有两个问题:

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

2 回答 2

11

这在 SQLite中称为类型关联。

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

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

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

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

于 2010-03-22T04:02:54.503 回答
6

例如,如果您查看 Firefox 的“about:config”页面,我相信这些设置实际上存储在 SQlite 数据库中(不过我不是 100% 确定)。使用 SQlite 的动态类型的好处是设置中的每个值都可以是强类型的(例如,“alerts.totalOpenTime”设置是一个整数,而“app.update.channel”是一个字符串)而不必有一个单独的每个类型的列。

最后,这与编程语言的论点基本相同:为什么编程语言中的动态类型优于静态类型?

于 2010-03-22T03:57:59.990 回答