提问人:user1165199 提问时间:10/10/2023 最后编辑:BenoitLondonuser1165199 更新时间:10/10/2023 访问量:35
写入日期时间时 RODBC sqlSave 失败
RODBC sqlSave failure when writing datetime
问:
当我尝试使用RODBC::sqlSave(RODBC版本1.3-20)将数据帧写入MySQL数据库时,出现错误。例如
在MySQL中创建测试表,日期时间采用各种格式
CREATE TABLE fractest( c1 DATETIME(0), c2 DATETIME(2), c3 DATETIME(4) );
然后在 R 中运行以下内容,我得到:
> x <- data.frame(c1 = Sys.time(),c2 = Sys.time(),c3 = Sys.time())
> conn <- RODBC::odbcConnect('MyDatabase')
> RODBC::sqlSave(
channel = conn,
dat = x,
append = TRUE,
tablename = 'fractest',
rownames = FALSE,
safer = TRUE,
fast = TRUE
)
Error in if (any(notOK <- (coldata[, 3L] == 0L))) { :
missing value where TRUE/FALSE needed
单步执行 RODBC,看起来问题出在 sqlColumns 将 COLUMN_SIZE 返回为 NA
> RODBC:::sqlColumns(conn, 'fractest')[c(4L, 5L, 7L, 9L)]
COLUMN_NAME DATA_TYPE COLUMN_SIZE DECIMAL_DIGITS
1 c1 93 NA NA
2 c2 93 NA NA
3 c3 93 NA NA
在旧版本的 RODBC (1.3-17) 上运行给了我
> RODBC:::sqlColumns(conn, 'fractest')[c(4L, 5L, 7L, 9L)]
COLUMN_NAME DATA_TYPE COLUMN_SIZE DECIMAL_DIGITS
1 c1 93 19 0
2 c2 93 19 0
3 c3 93 19 0
和 sqlSave 有效。
我已经设法通过设置参数来使其工作,但这速度较慢,我想让它快速运行。有谁知道另一种解决这个问题的方法。fast = FALSE
答: 暂无答案
评论