Наборы символов 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 | Нет ошибок}]}