小编典典

如何使用R从SQL数据库检索非常长的XML字符串?

sql

我有一个脚本,可以从SQL数据库获取XML文件。这是我的操作方法:

library(RODBC)
library(XML)

myconn <- odbcConnect("mydsn")

query.text <- "SELECT xmlfield FROM db WHERE id = 12345"
doc <- sqlQuery(myconn, query.text, stringsAsFactors=FALSE)
doc <- iconv(doc[1,1], from="latin1", to="UTF-8")
doc <- xmlInternalTreeParse(doc, encoding="UTF-8")

但是,解析不适用于特定的数据库行,尽管当我将该字段的内容复制到单独的文件中并从文件中进行解析时,解析仍然有效。经过两天的“反复试验”,我确定了主要问题。似乎以这种方式查询短的XML文件不会引起任何问题,但是当我查询较大的文件时,该字符串在65534个字符后被砍掉。因此,XML文件的末尾丢失了,并且该文件无法解析。

我认为这可能是计算机上ODBC连接的总体限制。但是,另一个也使用ODBC从同一数据库中获取相同XML字段的程序可以做到这一点,而不会出现任何问题。所以我想这是一个R特定的问题。

任何想法如何解决?


阅读 155

收藏
2021-03-23

共1个答案

小编典典

我已写信给包作者,终于收到以下答复:

您无法阅读不是我的问题,也不是合理的借口。

手册说

’\ item [字符类型]可以通过三种方式将字符类型分类:固定长度或可变长度,最大大小和所使用的字符
集。最常用的类型\脚注{它们的SQL名称为
\ code {CHARACTER VARYING}和\ code {CHARACTER},但
对于常规使用而言,它们太麻烦了。}对于
可变长度的短字符串,\ code {varchar} (上限),并使用\ code {char}
固定长度的短字符串(通常用空格右填充)。
“短”的值因DBMS的不同而不同,至少为254,通常为
几千,通常其他类型也可用于较长的
字符串。有一个健全性检查,它允许
在读取时最多允许65535个字节的字符串:可以通过以下方式删除该字符串:
重新编译\ pkg {RODBC}。”

该手册可docRODBC软件包目录中找到。该信息未包含在参考手册中。

在此期间,我找到了一个无需使用即可检索我的数据的好方法,但RODBC我没有尝试重新编译此程序包。但我希望此答案对遇到相同问题的人有所帮助。

2021-03-23