7 votes

Jeux de caractères Perl TDS

J'utilise le pilote FreeTDS avec DBD::Sybase, en me connectant à un serveur MS SQL. Lorsque j'interroge certaines valeurs de certains enregistrements, j'obtiens cette erreur :

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

Cela semble se produire pour les enregistrements contenant des caractères spéciaux du jeu de caractères Windows, tels que les guillemets, copiés et collés à partir de messages Outlook et Word.

Malheureusement, je n'ai aucun contrôle sur cette base de données ; l'assainissement des données à l'entrée est évidemment la meilleure solution, mais elle n'est pas à ma disposition.

Quels sont les paramètres de FreeTDS que je dois modifier pour pouvoir interroger ces enregistrements avec succès ?

Informations complémentaires :

La requête fonctionne correctement à partir de tsql. Je n'obtiens cette erreur qu'avec l'interface DBD::Sybase de Perl. (Devrais-je tester avec quelque chose d'autre ? Je n'ai pas encore l'expertise nécessaire pour installer PHP ou Python. J'ai jTDS et je peux l'utiliser, mais je pense qu'il s'agit d'une implémentation complètement différente, et non d'une interface avec FreeTDS).

Ajout

client charset = UTF-8

à mon fichier freetds.conf entraîne l'affichage de "Out of memory !" sur STDERR.

3voto

J'ai eu un problème similaire récemment.

Dans votre fichier freetds.conf, vous aurez besoin d'un paramètre similaire à ce qui suit :

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

le jeu de caractères du client est l'élément important ici.

Je faisais cela avec Perl sous Linux, je pense que UTF-8 est le meilleur choix ici aussi, étant donné que Perl est le client.

2voto

DVK Points 151

Vérifiez si cela vous aide ( à partir des manuels Sybase mais peut également fonctionner sur un serveur MSSQL) :

Contrôle de la conversion des caractères au cours d'une session

set char_convert permet à l'utilisateur de de décider comment la conversion des jeux de caractères de caractères au cours d'une session de travail de travail. Utilisez set char_convert pour :

* Set character set conversion on or off

* Start conversion into a specific character set

* Turn error reporting on or off

La syntaxe de set char_convert est la suivante :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X