Kenntnisstand

Oktober 2022

Beobachtung

Der Feldinhalt bestimmter Datenfelder aus dem Microsoft SQL Server (festgestellt mit 2012) wird auf die Hälfte reduziert

Mögliche Ursache

Als Ursache kommt ein Fehler im ODBC-Treiber in Betracht.

Betroffen sind Spalten vom Typ nvarchar(max) * bzw. varchar(max) *.  

'max' ist ein Schlüsselwort und steht nicht für einen Platzhalter sprich eine Zahl!

Beim Auslesen wird dabei ein Typ SQL_LONGVARCHAR anstelle von SQL_WLONGVARCHAR, bzw. SQL_VARCHAR anstelle von SQL_WVARCHAR geliefert, was zur Folge hat, dass die Feldlängen und damit der enthaltene Text halbiert wird.
Zusammengefasst: Unicode Text kommt mit ANSI-Flag und wird daher beim Kopieren halbiert.

Siehe hierzu auch:

http://msdn.microsoft.com/en-us/library/ms714102(v=vs.85).aspx

Vorgehensweise/Lösung/Workaround

Verwenden Sie andere oder fixed size Datentypen in der Datenbank-Tabelle oder erzeugen Sie einen View und verwenden diesen, falls die Tabelle nicht zu ändern ist.
z. B. select id, CAST(varcharmaxspalte AS varchar(1024)) AS varchar1024spalte from ...

Bugfix kann nun eingeschaltet werden über RegistryKey:

HKEY_LOCAL_MACHINE\Software\estos\MetaDirectory\Diagnostic

OldODBCDriver REG_DWORD 1


Für MetaDirectory 3.5 gilt folgender:

HKEY_LOCAL_MACHINE\Software(Wow6432Node)\ESTOS\MetaDirectory3.5\Diagnostic

OldODBCDriver REG_DWORD 1


Der Bugfix funktioniert nur für einige, nicht für alle Microsoft SQL-Treiber. Workaround sollte für alle gehen.