Seit letzter Woche habe ich mich mit einem äußerst ominösen Problem beschäftigt: Ich habe für einen Kunden ein Import-Script geschrieben, das aus mehreren Text-Dateien die Daten in eine MS SQL Server 2005-Datenbank importiert.
Bei unseren Tests hier in der Firma funktionierte alles wunderbar, es gab keine UTF-8- oder sonstigen Zeichensatz-Probleme – die Umlaute wurden korrekt dargestellt.

Nun meldete sich der Kunde und teilte uns mit, dass die Umlaute falsch dargestellt würden. Aus einem “für” wurde ein “fnr” u.s.w. Ein Schelm, wer jetzt denkt, es würde an UTF-8 liegen. Daran lag es nämlich nicht.

Der Kunde setzte einen amerikanischen Windows Server 2003 und ebenfalls einen amerikanischen Microsoft SQL Server 2005 ein – wir hingegen hatten die jeweils deutschen Versionen eingesetzt. Lag es an den unterschiedlichen Länder-Einstellungen? Nein, daran lag es nicht – wie wir nach dem Aufsetzen der selben Maschinenkonfiguration feststellten.

UTF-8-Probleme auf Seiten PHP konnte ich ebenfalls ausschließen, da sonst substr() aus dem “für” ein “fn” hätte machen sollen.

Über die Lösung des Problems bin ich mehr durch Zufall gestolpert: Das Tool cliconfig.exe (zu finden unter %WINDOWS%\system32) bietet unter dem Tab DB-Library Options die Option Automatic ANSI to OEM conversion. Auf unseren System war diese Option deaktiviert, beim Kunden hingegen aktiviert. Warum? Ganz einfach: die Datenbank beim Kunden lief vor einigen Monaten noch unter MS SQL Server 2000 und wurde dann auf SQL Server 2005 geupgradet. Die Standard-Einstellungen für den oben angegebenen Parameter. hatten sich vom Versionswechsel anscheinend geändert und somit konnten wir eben nicht die exakt gleichen Bedingungen nachstellen.

Was für ein Gefrickel, aber: Wieder ein Problem weniger auf der Welt.

Update: Ganz wichtig in diesem Zusammenhang ist, dass das Umlautproblem nur auftritt, wenn das PHP-Script von der Kommandozeile aufgerufen wird. Der Aufruf des Scripts als ausgeführtes CGI-Script in einer Apache-/IIS-/…-Umgebung liefert die richtigen Resultate.

I am asking you for a donation.

You liked the content or this article has helped and reduced the amount of time you have struggled with this issue? Please donate a few bucks so I can keep going with solving challenges.


0 Comments

Leave a Reply