mysql - 使用 R 包 RJDBC 重命名 MySQL select 语句中的列

标签 mysql r jdbc

我正在使用 RJDBC 包连接到 Windows 7 机器上 R 中的 MySQL (Maria DB) 数据库,我正在尝试这样的语句

select a as b
from table

但该列在数据框中将始终继续命名为“a”。

这通常适用于 RODBC 和 RMySQL,但不适用于 RJDBC。不幸的是,我必须使用 RJDBC,因为这是唯一一个对中文、希伯来语等字母的编码没有问题的包(设置名称等似乎不适用于 RODBC 和 RMySQL)。

有人遇到过这个问题吗?

最佳答案

我遇到了同样令人沮丧的问题。有时 AS 关键字会产生预期的效果,但有时则不会。我无法确定使其正常工作的条件。

简短回答:(感谢 Simon Urbanek(RJDBC 的软件包维护者)、Yev 和 Sebastien!请参阅详细回答。)您可以尝试的一件事是在连接字符串中使用 ?useOldAliasMetadataBehavior=true 打开 JDBC 连接。示例:

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)

这最终对我有用!在长答案

中查看更多详细信息,包括注意事项。

长答案:我尝试了各种各样的方法,包括制作 View 、更改查询、使用 JOIN 语句、不使用 JOIN 语句、使用 ORDER BY 和 GROUP BY 语句等。我永远无法弄清楚为什么我的一些查询能够重命名列而其他查询不能。

我联系了软件包维护者 (Simon Urbanek)。他是这样说的:

In the vast majority of cases this is an issue in the JBDC driver, because there is really not much RJDBC can do other than to call the driver.

然后他建议我确保拥有最新的 MySQL JDBC 驱动程序。我确实有最新版本。但是,这让我想到“也许这是 JDBC 驱动程序的错误”。所以,我在谷歌上搜索:mysql jdbc driver bug alias

此查询的最高结果是 an entry at bugs.mysql.com . Yev 使用 MySQL 5.1.22,他说当他从驱动程序版本 5.0.4 升级到 5.1.5 时,他的列别名停止工作。问是不是bug。

Sebastien 回答说:“不,这不是错误!这是驱动程序所有后续版本中记录的行为更改。”并建议使用 ?useOldAliasMetadataBehavior=true,引用 documentation for the JDBC driver .

Caveat Lector:JDBC 驱动程序的文档指出

useColumnNamesInFindColumn is preferred over useOldAliasMetadataBehavior unless you need the specific behavior that it provides with respect to ResultSetMetadata.

我还没有时间完全研究这意味着什么。换句话说,我不知道使用 useOldAliasMetadataBehavior=true 的所有后果是什么。使用风险自负。其他人有更多信息吗?

关于mysql - 使用 R 包 RJDBC 重命名 MySQL select 语句中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703900/

相关文章:

php - 如何将变量设置为 select 语句上的默认选择以及从数组中列出选择

R:使用 ggplot、geom_sf 和 openstreetmap 绘制多面体时出现异常错误

java - 什么时候应该在 ActiveMQ 中使用 JDBC 持久性适配器?

sql-server - 将 Logstash 连接到 SQL Server

java - hibernate中的Socket超时和Query超时有什么区别?

MYSQL 工作台。阻止特定插入的触发器

php - MySQL WHERE IN 条件与 IFNULL 函数

r - 带有 R : Can't change the projection for points/coordinates 的 map

php/mysql 防止多列上的重复条目

r - 创建一个PDF表格