在RSQLite中使用数据类型

时间:2018-07-27 12:24:30

标签: r types rsqlite

我使用带有以下代码的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和数据类型为double的列C3。现在,我希望数据库中具有以下值:

  C1  C2  C3
1  1   3 2.6

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

  C1  C2  C3
1  1 2.6 2.6

已定义的数据类型将被完全忽略。我程序中的错误是什么?

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

  

大多数SQL数据库引擎(据我们所知,除SQLite以外的所有SQL数据库引擎)都使用静态的刚性类型。对于静态类型,值的数据类型由其容器(存储值的特定列)确定。

     

SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身(而不是其容器)相关联。 SQLite的动态类型系统与其他数据库引擎的更常见的静态类型系统向后兼容,因为在静态类型的数据库上运行的SQL语句应在SQLite中以相同的方式运行。但是,SQLite中的动态类型允许它执行传统的严格类型数据库中无法做到的事情。