使用 RJDBC 时可以防止 db NULL 自动转换为 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如您所指出的,这似乎是 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).
事实证明,隐式 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.