FreeTDS не хватает памяти из DBD :: Sybase - PullRequest
1 голос
/ 07 мая 2010

Когда я добавляю

client charset = UTF-8

в мой файл freetds.conf моя программа DBD :: Sybase отправляет:

Out of memory!

и завершается. Это происходит, когда я вызываю execute () для оператора запроса SQL, который возвращает любые поля ntext. Я могу нормально возвращать числовые данные, datetime и nvarchars, но всякий раз, когда одним из полей вывода является ntext, я получаю эту ошибку.

Все эти запросы прекрасно работают без настройки UTF-8, но мне нужно обрабатывать некоторые символы, которые выдают предупреждения в наборе символов по умолчанию. (См. связанный вопрос .)

Сообщение об ошибке отформатировано не так, как другие сообщения об ошибках DBD :: Sybase, похоже, отформатированы. Я получаю сообщение о том, что откат (), однако. (Мой ложный флаг AutoCommit соблюдается.) Мне кажется, я где-то читал, что FreeTDS использует программу iconv для преобразования между наборами символов; Возможно ли, что это сообщение отправляется от iconv?

Если я выполняю тот же запрос с теми же настройками freetds.conf в tsql (оболочка SQL командной строки FreeTDS), я не получаю сообщение об ошибке.

Я подключаюсь к SQL Server.

Что мне нужно сделать, чтобы эти запросы успешно возвращались?

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

Я видел это в файле .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 
0 голосов
/ 07 мая 2010

Эти ссылки также актуальны и показывают, как можно изменить настройки без изменения файла freetds.conf:

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

Часто задаваемые вопросыбесполезно, не перечисляя фактическое сообщение об ошибке.

...