FreeTDS从DBD :: Sybase耗尽内存

时间:2010-05-07 17:10:21

标签: perl dbi freetds

当我添加

client charset = UTF-8

到我的freetds.conf文件,我的DBD :: Sybase程序发出:

Out of memory!

并终止。当我在返回任何ntext字段的SQL查询语句上调用execute()时会发生这种情况。我可以很好地返回数值数据,日期时间和nvarchars,但只要其中一个输出字段是ntext,我就会收到此错误。

所有这些查询都可以在没有UTF-8设置的情况下完美地运行,但我确实需要处理一些在默认字符集下发出警告的字符。 (见related question。)

错误消息的格式与其他DBD :: Sybase错误消息的格式化方式相同。我确实收到一条消息,表示正在发布rollback()。 (我的虚假AutoCommit标志正在受到尊重。)我想我读过某个地方,FreeTDS使用iconv程序在字符集之间进行转换;是否有可能从iconv发出此消息?

如果我在tsql(FreeTDS的命令行SQL shell)中使用相同的freetds.conf设置执行相同的查询,我不会收到错误。

我正在连接到SQL Server。

要使这些查询成功返回,我需要做什么?

2 个答案:

答案 0 :(得分:3)

我在.conf文件中看到了这一点 - 看看是否有帮助:

# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out of memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# (Microsoft servers sometimes pretend TEXT columns are
# 4 GB wide!) If you have this problem, try setting
# 'text size' to a more reasonable limit
text size = 64512 

答案 1 :(得分:0)

这些链接似乎也很相关,并显示如何在不修改freetds.conf文件的情况下更改设置:

http://lists.ibiblio.org/pipermail/freetds/2002q1/006611.html http://www.freetds.org/faq.html#textdata

常见问题解答特别无用,不会列出实际的错误消息。