Наборы символов Perl TDS

Я использую драйвер FreeTDS с DBD::Sybase, подключаясь к MS SQL Server. Когда я запрашиваю определенные значения определенных записей, я получаю эту ошибку:

DBD::Sybase::st fetchrow_arrayref failed: OpenClient message: LAYER = (0) ORIGIN = (0) SEVERITY = (9) NUMBER = (99)
Server , database 
Message String: WARNING! Some character(s) could not be converted into client's character set. Unconverted bytes were changed to question marks ('?').

Похоже, это происходит с записями, содержащими специальные символы Windows, такие как фигурные кавычки, скопированные и вставленные из сообщений Outlook и Word людей.

К сожалению, я не имею никакого контроля над этой базой данных; Обеззараживание входных данных на пути, очевидно, путь, но он мне недоступен.

Какие настройки FreeTDS мне нужно изменить, чтобы иметь возможность успешно запрашивать эти записи?

Дополнительная информация:

Запрос отлично работает из TSQL. Я получаю эту ошибку только через интерфейс Perl DBD:: Sybase. (Должен ли я протестировать что-то еще? У меня пока нет опыта установки PHP или Python. У меня есть jTDS и я могу его использовать, но я думаю, что это совершенно другая реализация, а не интерфейс для FreeTDS.)

Добавление

client charset = UTF-8

к моему файлу freetds.conf выводится "Недостаточно памяти!" напечатано в STDERR.

2 ответа

У меня недавно была похожая проблема.

В вашем файле freetds.conf вам понадобится запись, подобная следующей:

[DataSourceName]
        host = <IP Address>
        port = <databaseport>
        #version 8.0 seems to work  with sql server 2005
        tds version = 8.0
        client charset = UTF-8

здесь важен бит клиента.

Я делал это с Perl из Linux, я ожидаю, что UTF-8 будет лучшим выбором и здесь, учитывая, что Perl является клиентом

Проверьте, помогает ли это ( из Руководств Sybase, но может работать и на сервере MSSQL):

Управление преобразованием символов во время сеанса

set char_convert позволяет пользователю решать, как происходит преобразование набора символов во время определенного рабочего сеанса. Используйте set char_convert to:

* Set character set conversion on or off

* Start conversion into a specific character set

* Turn error reporting on or off

Синтаксис для set char_convert:

set char_convert {off |
{on [with {error | no_error}]} | charset [with {error | Нет ошибок}]}

Другие вопросы по тегам