Я использую драйвер 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.
Недавно у меня была похожая проблема.
В вашем файле 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 для:
* Set character set conversion on or off * Start conversion into a specific character set * Turn error reporting on or off
Синтаксис для set char_convert:
установить char_convert {off |
{на [с {ошибкой | no_error}]} | кодировка [с {ошибкой | Нет ошибки}]}