Назад | Перейти на главную страницу

Наборы символов 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.

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

В вашем файле 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}]} | кодировка [с {ошибкой | Нет ошибки}]}