Stefan: Fehler bei Umlauten in der Datenbank

Hallo zusammen,

ich speichere die Daten per DBI über ODBC auf einen MSSQL-Server 2012.

In einem Fall lese ich die Daten aus einer Tabelle uns speichere sie in eine andere Tabelle.

Ich übergebe z.B. als Ort "Füllinsdorf", in der Datenbank steht dann aber " Füllinsdorf". Wenn ich mit print den Ort ausgebe, ist er noch richtig ("Füllinsdorf").

Hat jemand ein Idee?

Vielen Dank und Grüsse

Stefan

  1. hi,

    Hat jemand ein Idee?

    Poste mal den Code, mit welchem Du das DB-Handle erstellst.

    Hotti

    --
    Seitdem ich mit Perl objektorientiert programmiere, entwickle ich nicht der OOP willen, sondern der Lösung willen.
  2. Tach!

    ich speichere die Daten per DBI über ODBC auf einen MSSQL-Server 2012.
    In einem Fall lese ich die Daten aus einer Tabelle uns speichere sie in eine andere Tabelle.
    Ich übergebe z.B. als Ort "Füllinsdorf", in der Datenbank steht dann aber " Füllinsdorf". Wenn ich mit print den Ort ausgebe, ist er noch richtig ("Füllinsdorf").

    Was in der Datenbank steht, siehst du nicht. Du siehst immer nur das, was das auslesende Programm aus den gelesenen Daten interpretiert. Dem Augenschein nach ist Füllinsdorf UTF-8-kodiert, wird aber als ISO-8859-1 gelesen. Es kann jedoch auch komplizierter sein, dass versehentlich eine zweifache UTF-8-Kodierung stattfand und beim Rückweg nur eine einfache UTF-8-Interpretation stattfindet.

    Hast du dich bereits mit dem Thema Zeichenkodierung beschäftigt? Du kannst das nicht sich selbst überlassen und hoffen, dass alles glatt geht. Es gibt da zwei Grundregeln:

    • Ein verarbeitendes System muss mit der Zeichenkodierung umgehen können, wenn es die Daten nicht nur unverändert durchreicht.
    • Bei der Übergabe an ein anderes System muss diesem die verwendete Kodierung mitgeteilt werden, und die Daten müssen dann auch so kodiert sein.

    Der Teufel steckt dann im Detail. Jedenfalls musst du dir erst einmal klar werden, welche Systeme hier beteiligt und wo die Schnittstellen zwischen ihnen sind. Weiterhin musst du ermitteln, wie man dem jeweils nachfolgenden System die Kodierung mitteilt. Der zweite Grundsatz muss noch ergänzt werden, um den Fall, dass Daten abgefragt werden. Dem System, das die Daten liefern soll, muss man mitteilen, in welcher Kodierung es liefern soll - wenn man das konfigurieren kann. Ansonsten muss man aus der Dokumentation oder Konfiguration entnehmen, welche Kodierung verwendet wird.

    Es kann nun sein, dass du falsch kodierte Daten dem DBMS übergibst oder die Kodierung nicht richtig (oder gar nicht) deklarierst. Es kann aber auch sein, dass beim Weg von der Datenabfrage zur Ausgabe (zum Beispiel im Browser) die genannten Grundsätze nicht beachtet wurden.

    dedlfix.

  3. Du musst deinen Code zeigen. Ohne ihn ist dein Hilfeansuchen wertlos.

    Gib zu Diagnosezwecken die Variable, die den String "Füllinsdorf" enthält, mittels Devel::Peek::Dump() aus.