MS-SQL, PHP – und Umlaute

Nachdem ich alle verfügbaren Funktionen in PHP life mit einem MS-SQL-Server durchprobiert habe, um Umlaute und Sonderzeichen in eine Tabelle zu prügeln, also Unicode-Zeichenketten einzufügen, war die Lösung eine ganz unerwartete:

Im Startmenü: MS SQL Server -> Client Network Utility -> Registerkarte „DB-Library Options“ und dann „Automatic Ansi to OEM conversation“ das Häkchen entfernen.

MS-SQL speichert im UCS-2 bzw. UTF-16 Zeichensatz, aber alle Konvertierungen innerhalb PHP wurden durch die Einstellung in den Netzwerk-Parametern zunichte gemacht.

Zusätzlich müssen nach meinen Experimenten folgende Voraussetzungen gegeben sein:

  1. PHPs interne Zeichendarstellung sollte 8bit sein. Falls jemand mit Iconv herumspielt, sollte er probieren, ob es auch mit anderen Einstellungen geht.
  2. Die Spalten in der SQL-Server Datenbanktabelle müssen vom Typ NVARCHAR statt VARCHAR sein. Analog NTEXT statt TEXT, etc.
  3. Bei mir seltsamerweise nicht notwendig, aber sauberer: Die Strings für die Unicode-Spalten bei INSERT und UPDATE sollten mit N’xxxx‘ statt sonst ‚xxxx‘ geschrieben werden.

Kaum war das Häkchen weg und die Spaltendefinition umgestellt, funktionierte das Skript ohne Änderungen und insbesondere ohne Konvertierungen mit mb_convert_encoding() oder iconv().

Danke an Michael Bieri in Problem mit Umlauten mit MS-SQL und PHP.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: