写入日期时间时 RODBC sqlSave 失败

RODBC sqlSave failure when writing datetime

提问人:user1165199 提问时间:10/10/2023 最后编辑:BenoitLondonuser1165199 更新时间:10/10/2023 访问量:35

问:

当我尝试使用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

r 罗德布克

评论


答: 暂无答案