使用 RJDBC 时可以防止 db NULL 自动转换为 0 吗?

发布于 2024-10-20 20:10:32 字数 377 浏览 5 评论 0原文

我正在使用 RJDBC (DBI) 连接到 H2 数据库。数据库中为 null 的字段在调用 dbReadTable 或 dbGetQuery 函数产生的 R 数据帧中隐式转换为 0。

我一直在努力寻找任何有关此问题的文档,但至少找到了另一个使用 RJDBC 连接到 mysql 数据库的人对这个问题的引用,所以我目前不认为问题出在 H2 上。

我更喜欢 NA 或 NULL,其中数据库值为空。是否有一些可选参数或其他方法可以防止 R 中带有 DBI 的 RJDBC 驱动程序隐式替换数据库空值?

编辑:这似乎只发生在数字类型的列上。转换为因子的基于 VARCHAR 的列似乎具有数据库 NULL 的 NA。隐式 0 转换是 RJDBC 处理数字列中的 NULL 的已知错误(或危险功能)吗?

I am connecting to a H2 database using RJDBC (DBI). Fields that are null in the database are being implicitly converted to 0 in R dataframes resulting from calls the dbReadTable or dbGetQuery functions.

I have struggled to find any documentation on this but have found at least one other reference to the problem from someone using RJDBC connecting to a mysql database so I don't currently expect the problem to be with H2.

I would much prefer a NA or NULL where the database value is null. Is there some optional parameter or other means of preventing the RJDBC driver with DBI in R from implicitly replacing database null values?

EDIT: This appears to only happen for columns with a numeric type. VARCHAR based columns converted to factors appear to have NAs for database NULLs. Is implicit 0 conversion a known bug (or dangerous feature) of RJDBC handling NULLs in numeric columns?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故乡的云 2024-10-27 20:10:32

正如您所指出的,这似乎是 RJDBC 的问题。解决方法在 版本 0.1-2.3 中实现RH2 软件包(最近上传到 CRAN,现在刚刚在 CRAN 和镜像中可用)。

This seems to be a problem with RJDBC as you indicate. A workaround is implemented in version 0.1-2.3 of the RH2 package (recently uploaded to CRAN and just becoming available now at CRAN and the mirrors).

策马西风 2024-10-27 20:10:32

事实证明,隐式 null 到 0 转换是 JDBC API 的一个“功能”,RJDBC 是一个薄包装器。

http://download.oracle。 com/javase/6/docs/api/java/sql/ResultSet.html#getDouble(int)

让我大吃一惊。

CRAN 上提供的 RJDBC 0.1-6 的最新开发版本现在可以解决这种虚假行为,并正确返回数字 SQL 空值的 NA。

It turns out the implicit null to 0 conversion is a "feature" of the JDBC API that RJDBC is a thin wrapper around.

http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getDouble(int)

Consider me flabbergasted.

The latest development version of RJDBC 0.1-6 available on CRAN now works around this mendacious behavior and correctly returns NA for numeric SQL nulls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文