Perl conjuntos de caracteres TDS

7

Estou usando o driver FreeTDS com DBD :: Sybase, conectando-me a um MS SQL Server. Quando eu consultar determinados valores de determinados registros, recebo este erro:

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 ('?').

Isso parece acontecer com registros que contêm caracteres especiais do conjunto de caracteres do Windows, como aspas curvas, copiadas e coladas das mensagens do Outlook e do Word das pessoas.

Infelizmente, eu não tenho nenhum controle desse banco de dados; sanear a entrada no caminho é obviamente o caminho a percorrer, mas não está disponível para mim.

Quais configurações do FreeTDS eu preciso alterar para poder consultar com êxito esses registros?

Informações adicionais:

A consulta funciona bem no tsql. Eu só recebo esse erro através da interface DBD :: Sybase do Perl. (Eu deveria testar através de outra coisa? Eu não tenho o conhecimento necessário para instalar o PHP ou Python. Eu tenho o jTDS e posso usá-lo, mas eu acho que é uma implementação completamente diferente, não uma interface para FreeTDS.)

Adicionando

client charset = UTF-8

ao meu arquivo freetds.conf resulta em "Memória insuficiente!" impresso em STDERR.

    
por skiphoppy 04.05.2010 / 23:24

2 respostas

3

Eu tive um problema semelhante recentemente.

No seu arquivo freetds.conf você vai querer um entrada semelhante à seguinte:

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

O conjunto de caracteres do cliente é o ponto importante aqui.

Eu estava fazendo isso com o Perl do Linux, espero que o UTF-8 também seja a melhor escolha, dado que o Perl é o Cliente

    
por 05.05.2010 / 02:01
2

Verifique se isso ajuda ( nos Manuais da Sybase , mas também pode funcionar no servidor MSSQL):

Controlando a conversão de caracteres durante uma sessão

set char_convert allows the user to decide how character set conversion operates during a particular work session. Use set char_convert to:

* Set character set conversion on or off

* Start conversion into a specific character set

* Turn error reporting on or off

The syntax for set char_convert is:

set char_convert {off |
{on [with {error | no_error}]} | charset [with {error | no_error}]}

    
por 05.05.2010 / 01:47