通过 rodbc 写入 mysql 数据库的 posix 被截断

Posted

技术标签:

【中文标题】通过 rodbc 写入 mysql 数据库的 posix 被截断【英文标题】:posix written through rodbc into mysql database gets truncated 【发布时间】:2015-03-08 20:01:00 【问题描述】:

当我使用 RODBC 将 POSIXct 类的列写入 mysql 数据库时,它会被截断为仅年份。 例如,这种情况发生在:

sqlSave(connection, dat = data.frame(date = as.POSIXct("2015-01-01 08:10:00")+0:10*60), 
    tablename = "date_column")

我怎样才能避免这种情况?

【问题讨论】:

不幸的是我忘记了为什么我决定不使用它。除了更容易设置之外,RMySQL 与 RODBC 相比还有哪些优势? 理论上应该会快一些,因为 RMySQL 直接与 MySQL 对话,而不是通过第三方。不知道它有多少实际的不同。 【参考方案1】:

你可能需要像这样在mysql中明确地创建日期时间类型的列:

library(RODBC)
con <- odbcConnect("mysql", uid="root", case = "tolower")
(dat <- data.frame(date = Sys.time()))
#                  date
# 1 2015-03-08 23:55:33
res <- sqlSave(con, dat = dat, varTypes = c("date" = "datetime"), tablename = "date_column")
close(con)

【讨论】:

是的,这就是解决方案!谢谢!可能还值得指出的是,如果存在差异(例如,日期变为日期),“日期”的拼写必须像在 sql 表中命名而不像在 data.frame 中那样命名。

以上是关于通过 rodbc 写入 mysql 数据库的 posix 被截断的主要内容,如果未能解决你的问题,请参考以下文章

提高 RODBC-Postgres 写入性能

使用 RODBC 将公式写入 Excel 文件

如何从 RODBC 读取 300 万条记录并写入文本文件

RODBC - 值不适合数字

MySQL 表中带有重音符号的字符串在 R (RODBC) 中返回为 NA

R 中的 RODBC 包使用引号创建列名......为啥?