我有一个包含各种令牌和频率计数的数据库。当我尝试使用 RSQLite 从 R 中检索这些时,我得到的负数较低,因此可能存在缓冲区溢出问题。如果我在说 sqliteman 中打开数据库并手动查询它,则数据会正确返回,所以它必须与 DBI 或 RSQLite 有关。
有没有办法通过 RSQLite 检索非常大的整数/浮点值而没有这个问题?
这是一个最小的例子:
library("DBI"); library("RSQLite")
db.h <- dbConnect(RSQLite::SQLite(), dbname=":memory:")
dbGetQuery(db.h, "CREATE TABLE test (a TEXT, b INT)")
dbGetQuery(db.h, "INSERT INTO test VALUES ('value1', 282817178)")
dbGetQuery(db.h, "INSERT INTO test VALUES ('value2', 15620693910)")
result = dbGetQuery(db.h, "SELECT * FROM test")
result
dbDisconnect(db.h)
我得到的输出如下:
> a b
> 1 value1 282817178
> 2 value2 -1559175274
我在 32 位 Windows 7 上使用 RStudio 0.98.501(R 版本 3.0.2),如果这完全相关的话。
编辑:请注意,SQLite 3 对内存和请求处理中的所有值使用 64 位整数。如以下评论中建议的那样,使用 BIGINT 代替 INT 会产生相同的溢出问题。