【问题标题】:Using Datatypes with RSQLite在 RSQLite 中使用数据类型
【发布时间】:2018-07-27 12:24:29
【问题描述】:

我使用 RSQLite 包和以下代码创建了一个 R 语言的数据库。

con <- dbConnect(RSQLite::SQLite(), "TEST.db")
dbSendQuery(con, "CREATE TABLE TabA (C1 INTEGER NOT NULL, C2 INTEGER NOT NULL, C3 REAL, PRIMARY KEY (C1))")
dbSendQuery(con, "INSERT INTO TabA (C2,C3) VALUES (2.6,2.6)")
dbGetQuery(con, "SELECT * FROM TabA")
dbDisconnect(con)

我定义了一个数据类型为整数的列 C2 和数据类型为双精度的 C3。现在我希望我的数据库中有以下值:

  C1  C2  C3
1  1   3 2.6

但我的查询给出了以下结果:

  C1  C2  C3
1  1 2.6 2.6

完全忽略定义的数据类型。我的程序有什么错误?

谢谢

【问题讨论】:

    标签: r types rsqlite


    【解决方案1】:

    这是 SQLite 的一个特性:每行中的列可以包含不同的数据类型,类型声明被存储但不强制执行。

    来自https://www.sqlite.org/datatype3.html

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

    SQLite 使用更通用的动态类型系统。在 SQLite 中,值的数据类型与值本身相关联,而不是与其容器相关联。 SQLite 的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的 SQL 语句应该在 SQLite 中以相同的方式工作。然而,SQLite 中的动态类型允许它完成传统刚性类型数据库中无法做到的事情。:

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2012-11-07
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多