Ich verwende den FreeTDS-Treiber mit DBD :: Sybase und verbinde mich mit einem MS SQL Server. Wenn ich bestimmte Werte bestimmter Datensätze abfrage, wird folgende Fehlermeldung angezeigt:
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 ('?').
Dies scheint bei Datensätzen zu passieren, die spezielle Windows-Zeichensatzzeichen enthalten, z. B. geschweifte Anführungszeichen, die aus den Outlook- und Word-Nachrichten von Personen kopiert und eingefügt wurden.
Leider habe ich keine Kontrolle über diese Datenbank; Die Eingabe auf dem Weg nach innen zu bereinigen ist natürlich der richtige Weg, steht mir aber nicht zur Verfügung.
Welche FreeTDS-Einstellungen muss ich ändern, um diese Datensätze erfolgreich abfragen zu können?
Zusätzliche Information:
Die Abfrage funktioniert gut von tsql. Ich erhalte diesen Fehler nur über die DBD :: Sybase-Schnittstelle von Perl. (Soll ich etwas anderes testen? Ich habe noch nicht das Fachwissen, um PHP oder Python zu installieren. Ich habe jTDS und kann es verwenden, aber ich denke, das ist eine völlig andere Implementierung, keine Schnittstelle zu FreeTDS.)
Hinzufügen
client charset = UTF-8
zu meiner freetds.conf Datei führt zu "Nicht genügend Speicher!" gedruckt auf STDERR.
quelle
Antworten:
Ich hatte kürzlich ein ähnliches Problem.
In Ihrer freetds.conf-Datei möchten Sie einen Eintrag ähnlich dem folgenden:
Client-Zeichensatz ist hier das wichtige Bit.
Ich habe dies mit Perl unter Linux gemacht. Ich gehe davon aus, dass UTF-8 auch hier die beste Wahl ist, da Perl der Client ist
quelle
Überprüfen Sie, ob dies hilfreich ist ( aus den Sybase-Handbüchern , funktioniert aber möglicherweise auch auf MSSQL-Servern):
Steuern der Zeichenkonvertierung während einer Sitzung
quelle