Simba Mongodb ODBC 驱动程序:返回的数据与预期的数据长度不匹配

Posted

技术标签:

【中文标题】Simba Mongodb ODBC 驱动程序:返回的数据与预期的数据长度不匹配【英文标题】:Simba Mongo ODBC driver: returned data that does not match expected data length 【发布时间】:2014-09-24 16:59:50 【问题描述】:

我们正在使用 Simba Mongo ODBC 驱动程序连接到 Mongo 数据库并进行 sql 查询。我使用 isql 在 Linux 上测试了连接,并且能够执行查询。

当我的客户尝试通过 Microsoft SQL Server Management Studio 连接到 Mongo 时,他收到以下错误:

OLE DB provider 'MSDASQL' for linked server 'mongo' returned data that does not match
expected data length for column '[MSDASQL].contributorComposite__0__biographicalNote'.
The (maximum) expected data length is 255, while the returned data length is 290.

我从未使用过此应用程序。你知道我可以在哪里控制预期的数据长度吗?

【问题讨论】:

【参考方案1】:

链接服务器对元数据和返回的数据非常挑剔,一般来说,如果您定义的元数据与使用它与使用其他应用程序时的预期不完全匹配,您更有可能遇到问题。

在这种情况下,您正在检索定义了字符串列的数据。字符串列中的数据长度为 290,但驱动程序报告长度为 255。这是因为 MongoDB 不返回有关任何特定字段长度的元数据,因为它是无模式数据源。驱动程序改为使用默认值来报告字符串列的长度,默认情况下设置为 255。您可以通过打开 DSN 的配置对话框、转到高级选项并将标准字符串列长度从 255 更改为更大的值,比如 512。这应该允许链接服务器正常运行,除非您的数据超过 512 字节,在这种情况下,您只需将其调整为更大的适当值。

【讨论】:

谢谢。它确实解决了“返回的数据与预期的数据长度不匹配”错误的问题。但现在我收到另一条错误消息“不支持请求的转换”。我想这是另一个主题的主题。 您好 Tamara,如果您直接联系解决方案@simba.com,他们应该能够帮助您快速解决任何其他问题,包括您遇到的新问题。 请注意,链接服务器在通过 ODBC 数据源时有 8000 个字符的限制,如果您的数据超过该限制,您必须重新构建查询以解决它。【参考方案2】:

我找到了这个答案here:解决这个问题的一种方法是构造你的SQL语句,例如:

declare @myStmt varchar(max)
set @myStmt = 'select * from my_collection'
EXECUTE (@myStmt) AT MongoDB_PROD_mydb

我确实在链接的 SQLite 服务器上亲自尝试过,它确实有效,但奇怪的是,在较长的条目上,文本会被随机截断。我还没有弄清楚这部分 - 它可能与我正在使用的 SQLiteODBC 驱动程序有关。

但是处理了“预期数据长度”的错误。

迈克尔

【讨论】:

以上是关于Simba Mongodb ODBC 驱动程序:返回的数据与预期的数据长度不匹配的主要内容,如果未能解决你的问题,请参考以下文章

用于 Google BigQuery 的 Simba ODBC 驱动程序看不到共享数据集

授予 Simba ODBC 驱动程序或 bigrquery 访问 Google Drive 文件的权限

bigquery Simba JDBC 驱动程序是不是支持批量查询?

PowerBi利用Python Script绕过ODBC来导入MongoDB数据

使用 SIMba JDBC 驱动程序访问特定 Google bigquery 数据集的元数据

通过 Simba JDBC 的 Databricks Spark 连接问题