24

我有一个名为 的数据框,df如下所示:

dte, val
2012-01-01, 23.2323
2012-01-02, 34.343

列上的类型是日期和数字。我想使用已经打开的连接将其写入 MySQL 数据库。连接工作正常,因为我能够很好地查询数据库。我尝试运行以下命令:

dbWriteTable(con, name="table_name", value=df, field.types=list("date", "double(20,10)"))

这会产生错误:

函数错误(类、fdef、mtable):无法找到函数“make.db.names”的继承方法,用于签名“MySQLConnection”、“NULL”

如果我没有指定 field.types,然后运行:

dbWriteTable(con, name="table_name", value=df)

我得到错误:

mysqlExecStatement(conn, statement, ...) 中的错误:RS-DBI 驱动程序:(无法运行语句:密钥规范中使用的 BLOB/TEXT 列“dte”没有密钥长度)

任何人都可以对此有所了解吗?

谢谢

4

2 回答 2

34

玩了之后才意识到问题出在哪里:field.types必须是NAMED列表向量,而不是简单的列表;此外,不能包含行名,否则我们需要三种字段类型。对于上面的示例,以下工作正常:

dbWriteTable(con, name="table_name", value=df,
  field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
于 2012-01-15T18:39:32.693 回答
-1

那是因为表名。mysql 表名不要使用大写字母。

于 2020-08-19T10:26:56.013 回答