mysql - dbWriteTable:如果表名是“READ”(保留字),则会发生错误
问题描述
我正在尝试使用 R 中 DBI 包中的函数将 tibble 上传到 mysql 服务器。
但是,如果表名是“READ”或“READs”,我会遇到错误。
# an simple table
> x <- tibble(x=rep("a",5))
> dbWriteTable(DB, "READ", x, overwrite = TRUE, row.names = FALSE)
Error in .local(conn, statement, ...) :
could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ
( `x` text
)' at line 1
改成其他名字上传成功,
> dbWriteTable(DB, "READa", x, overwrite = TRUE, row.names = FALSE)
[1] TRUE
我不明白这里的语法错误是什么......
有人可以解释一下吗?
解决方案
搜索后,我认为这个问题是重复的,但我发现没有结论的答案。所以我会发布我试图解决问题的内容。
正如评论中所讨论的,“READ”是 MySQL 中的保留字。而且,反引号不能解决函数中的错误dbWriteTable
。有趣的是,“READ”使用dbCreateTable
.
所以诀窍是用 . 创建表,dbCreateTable
然后用dbWriteTable
.
这是我尝试过的代码:
dbCreateTable(DB, "READ", table,
fields = c(Sample_PatientID = "varchar(20)",
Sample_Type = "tinyint",
Sample_Analytic = "varchar(20)",
GeneID = "integer",
Value = "decimal(17,10)"))
dbWriteTable(DB, "READ", table, append = TRUE, row.names = FALSE)
# fields is for defining datatype, as field.types in dbWriteTable.
推荐阅读
- javascript - php:想在浏览器中使用 ajax 或 onclick 以文本方式创建图像
- r - 如何将R中的自定义悬停文本添加到相互引用的两个系列中
- java - Tomcat 处理时间很小,但 nginx 显示它很大
- c# - 如何确保 Environment.Exit() 关闭应用程序?
- wordpress - 我正在尝试选择特定帖子的图像
- java - 如何修复一些错误编译java
- angular - 如何在我的 angular(6+) PWA 应用程序中引入共享选项以将媒体共享到社交应用程序(Messenger、Whatsapp)?
- scala - 仅当来自 KAFKA 主题的新非空消息到达时,如何在结构化流中执行操作?
- bash - shell脚本单for循环如何从文件中获取输出
- oracle - 限制 Oracle 创建编译错误程序