我正在使用RJDBC软件包连接到Windows 7机器上的R中的MySQL(Maria DB)数据库,我正在尝试像
select a as b
from table
Run Code Online (Sandbox Code Playgroud)
但该列将始终在数据框中继续命名为"a".
这通常适用于RODBC和RMySQL,但不适用于RJDBC.不幸的是,我必须使用RJDBC,因为这是唯一一个对中文,希伯来语等字母编码没有问题的软件包(集合名称等似乎不适用于RODBC和RMySQL).
有人遇到过这个问题吗?
我遇到了同样令人沮丧的问题.有时AS关键字会产生预期的效果,但有时却不会.我无法确定使其正常工作的条件.
答案很简单:(!感谢Simon Urbanek(用于RJDBC包维护者),YEV和塞巴斯蒂安·见龙答案.)一件事,你可以尝试使用是打开你的JDBC连接?useOldAliasMetadataBehavior=true在连接字符串中.例:
drv <- JDBC("com.mysql.jdbc.Driver", "C:/JDBC/mysql-connector-java-5.1.18-bin.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://server/schema?useOldAliasMetadataBehavior=true", "username", "password")
query <- "SELECT `a` AS `b` FROM table"
result <- dbGetQuery(conn, query)
dbDisconnect(conn)
Run Code Online (Sandbox Code Playgroud)
这最终为我工作!在详细答案中查看更多详细信息,包括警告.
长答案:我尝试了各种各样的东西,包括制作视图,更改查询,使用JOIN语句,不使用JOIN语句,使用ORDER BY和GROUP BY语句等.我从来没有弄清楚为什么我的一些查询能够重命名列和其他人不是.
我联系了包维护者(Simon Urbanek.)以下是他所说的:
在绝大多数情况下,这是JBDC驱动程序中的一个问题,因为除了调用驱动程序之外,RJDBC实际上没有什么可以做的.
然后他建议我确保我有最新的MySQL JDBC驱动程序.我确实有最新的版本.然而,它让我想到"也许它是JDBC驱动程序的错误." 所以,我搜索谷歌:mysql jdbc driver bug alias.
此查询的最高结果是bugs.mysql.com上的条目.Yev,使用MySQL 5.1.22,说当他从驱动程序版本5.0.4升级到5.1.5时,他的列别名停止工作.被问到这是不是一个bug.
塞巴斯蒂安回答说:"不,这不是一个错误!这是在所有后续版本的驱动程序中记录的行为变化." 并建议使用?useOldAliasMetadataBehavior=true,引用JDBC驱动程序的文档.
Caveat Lector: JDBC驱动程序的文档说明了这一点
useColumnNamesInFindColumn优先于useOldAliasMetadataBehavior,除非您需要它提供的与ResultSetMetadata相关的特定行为.
我没有时间充分研究这意味着什么.换句话说,我不知道使用的所有后果是什么useOldAliasMetadataBehavior=true.使用风险由您自己承担.别人有更多信息吗?