Sieht mir ganz nach einem Fehler in der ODBC-Schnittstelle aus.
Für die ODBC-Routinen gibt es immer ein A-Version und eine W-Version.

Welche verwendet wird, hängt von einer C++-Compiler-Option ab, ob man Singlebyte oder Multibyte (UNICODE) verwendet.

Bei der Verwendung von UNICODE scheint es bei dir zu einem Umsetzungsproblem von Multibyte zu Single- oder Widecharacter zu kommen, was ggf. implizit durch den Compiler verursacht wird.

Dies macht nicht der ODBC-Treiber selber !

Die Umsetzungsroutine von Multibyte nach Singlebyte scheint nicht mit der richtigen Lokale zu arbeiten, so dass hier eben Schrott rauskommt und aus 'Nürnberg' eben 'N\ffrnberg' wird.

Versuche mal deine SQL's nicht mit TCHAR (was automatisch 1/2-Byte je nach Compiler-Option ist) sondern mit char[nn] aufzubauen.