2016-04-18 16 views
0

Ich ziehe Daten von einem MSSQL-Server über PDO auf einem Unix-System heraus. Nachdem ich den Easysoft ODBC-Treiber ausprobiert habe, der wie vorgesehen funktioniert (aber teuer!), Probiere ich FreeTDS aus, bevor wir uns zum Kauf einer Lizenz verpflichten.FreeTDS MSSQL nvarchar (max) Ausgabe

Der Versuch, Daten aus dem SQL-Server, der auf nvarchar (MAX) festgelegt ist, zu ziehen - es kommt als einige sehr seltsame Zeichen, anstatt was erwartet wird. Ich kann die Spaltentypen in der Datenbank nicht bearbeiten.

Zum Beispiel, ein Wert im Feld nvarchar (max) ist auf "admin" gesetzt, kommt aber als "> ÷ Ý" - alle anderen Spaltentypen scheinen zu funktionieren OK.

Um dies zu beheben mit dem Easysoft-Treiber, hatte ich aus FreeTDS „VarMaxAsVarchar“, um auf (http://www.easysoft.com/products/data_access/odbc-sql-server-driver/manual/configuration.html)

Gibt es eine ähnliche Einstellung zu setzen?

Als Referenz stelle ich eine Verbindung zu einer Microsoft SQL Server 2012-Datenbank her, wobei TDS Version auf 7.4 eingestellt ist. Hier

ist die Konfigurationsdateien:

/etc/freetds.conf:

[global] 
# TDS protocol version 
tds version = 7.4 

# If you get out-of-memory errors, it may mean that your client 
# is trying to allocate a huge buffer for a TEXT field. 
# Try setting 'text size' to a more reasonable limit 
text size = 64512 

[mssql_freetds] 
    host = xxxxx 
    port = xxxx 
    tds version = 7.4 

/etc/odbc.ini

[mssql_freetds] 
Driver=FreeTDS 
Description=MSSQL FreeTDS 
Server=xxxxx 
Port=xxxx 
TDS_Version = 7.4 

Irgendwelche Gedanken?

+0

prüfen verpasst 'N' wörtliche vor allen String-Ressourcen ... – Devart

+0

Welche Version von FreeTDS verwenden Sie? v1.0 steht kurz vor der Veröffentlichung und ist die einzige Version, die die Version 'TDS_Version' 7.4 unterstützt: https://github.com/FreeTDS/freetds/blob/master/NEWS Andernfalls wird auf Version 7.1 zurückgegriffen. Sie finden unsere Version mit 'tsql -C'. – FlipperPA

+0

Hi @FlipperPA mit v0.95.91 - nicht realisiert, dass v1 in Produktion war. Soll ich warten, da dies auf einem Produktionsserver ist? – spirie

Antwort

0

Casting der Spalte scheint die beste Option bisher, hat gut für meine Anwendung funktioniert.

CAST(Column AS varchar(4000)) as Column