【问题标题】:RODBC string getting truncatedRODBC 字符串被截断
【发布时间】:2011-06-05 03:20:54
【问题描述】:

我正在使用 RODBC 将数据从 MySql Server 提取到 R 中。
所以在数据库的一列中是一个字符向量

SELECT MAX(CHAR_LENGTH(column)) FROM reqtable;

返回 26566

现在我将向您展示我是如何遇到问题的示例

`library(RODBC)
 con <- odbcConnect("mysqlcon")
 rslts <- as.numeric(sqlQuery(con,
                          "SELECT CHAR_LENGTH(column) FROM reqtable LIMIT 10",
                          as.is=TRUE)[,1])

` 返回

> rslts
 [1]  62  31  17 103  30 741  28  73  25 357

作为 rslts <- nchar(as.character(sqlQuery(con, "SELECT column FROM reqtable LIMIT 10", as.is=TRUE)[,1])) 返回

> rslts
 [1]  62  31  17 103  30 255  28  73  25 255

所以长度 > 255 的字符串在 255 处被截断。有没有办法获得完整的字符串。

谢谢

【问题讨论】:

标签: mysql r rodbc


【解决方案1】:

另一种可能会限制检索到的字符数的原因是 RODBC 包本身的“健全性”检查限制为 65535 个字节 -- as mentioned here

【讨论】:

    【解决方案2】:

    PostgreSQL ODBC 驱动程序有一个名为 MaxLongVarcharSize 的变量,我发现它默认设置为 8190(我在 Windows 和 Ubuntu 上都使用过它)。 MySQL ODBC 驱动程序可能有一个类似的变量设置为 255。

    【讨论】:

    • 嘿,知道如何检查和编辑它吗?我想这是一个类似的问题
    • 在 Windows 上,您选择数据源(在控制面板 | 管理工具 | ODBC 源中)并单击配置,然后选择显示数据源的按钮。 MaxLongVarCharSize 变量就在那里。在 Ubuntu 上,您将 MaxLongVarcharSize = 256000(或其他)行添加到文件 /etc/odbc.ini 中的相关数据源。
    【解决方案3】:

    您可以尝试使用其他数据库驱动程序,例如 JDBC。根据我的经验,这有时可以解决问题。

    另外,试试RMySQL包(当前的二进制文件需要编译,如果你自己编译,请与社区分享)

    RODBC 包的来源可能“可以”提供有关默认长度限制(如果有)的见解。 (我还没有看,但我很快就会在这里发布更新)

    【讨论】:

    • 嘿,谢谢你,它与 JDBC 连接完美结合。然而尚不清楚为什么它不能与 ODBC 连接正常工作:(
    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多