Umlaute in die Datenbank schreiben und lesen
Umlaute in die Datenbank schreiben und lesen
am 23.08.2006 15:26:40 von Bernhard Schimanski
Hallo NG,
aus eine xml-Datei, erste Zeile in der Datein:
lese ich mit Hilfe von PHP 5.1.4 Daten mit den
"new DomDocument" aus, diese Daten werden in eine Datenbank
geschrieben, MSSQL 8.0, bevor ich die Daten in die Datenbank schreibe,
erstelle ich ein Tabelle. Bei erstellen der Tabelle verwende ich die
Collation, Bsp:
SpaltenName nvarchar(500) COLLATE Latin1_General_CI_AS NULL
Also jede Spalten, die von Typ "nvarchar" ist hat die oben genannte
Collation.
Daten in die DB schreiben, habe paar Versuche unternommen, um die
Umlaute(äÄ, öÖ, üÖ ß) korrekt in die DB rein zuschreiben.
- beim schreiben verwende ich keine PHP Konvertirung, die Umlauten
werden falsch in der php Seite angezeigt.
- Beim schreiben in die DB verwende ich "htmlentities" und beim lesen
die "html_entity_decode" fast alle Umlaute werden korrekt dargestelle
außer "Ü" und "ß".
Beim schreiben und lesen habe ich mit utf8_decode und utf8_utf8_encode
etwas experimentiert, ohne brauchbaren Ergebnis.
Meine Frage, wie kann ich die zwei fehlende Zeichen korrekt darstellen?
Würde der Sache etwas Helfen wenn ich in der DB die Collation ändere?
Falls ja welche konnte noch eingestellt werden?
Danke im Voraus.
Grüße Bernhard
Re: Umlaute in die Datenbank schreiben und lesen
am 23.08.2006 15:48:15 von Ulf Kadner
Bernhard Schimanski wrote:
> SpaltenName nvarchar(500) COLLATE Latin1_General_CI_AS NULL
Evtl. Ist die Collation falsch für Umlaute. Must Du halt in ner NG
fragen in der MSSql auch das Thema ist.
> Daten in die DB schreiben, habe paar Versuche unternommen, um die
> Umlaute(äÄ, öÖ, üÖ ß) korrekt in die DB rein zuschreiben.
> - beim schreiben verwende ich keine PHP Konvertirung, die Umlauten
> werden falsch in der php Seite angezeigt.
Wenn sie nur falsch angezeigt werden hat das von Dir ausgegebene
HTML-Dokument nicht das korrekte charset gesetzt, oder der Server sendet
einen inkorrekten header dafür.
Wenn diese bereits aus ge Datenbank falsch rauskommen halt Du eine
falsche Kollation/Charset gesetzt.
> - Beim schreiben in die DB verwende ich "htmlentities" und beim lesen
> die "html_entity_decode" fast alle Umlaute werden korrekt dargestelle
> außer "Ü" und "ß".
die Funktionen haben nix mit Charsets zu tun.
Wo falsch dargestellt im Browser oder im Html-Source?
MfG, Ulf
Re: Umlaute in die Datenbank schreiben und lesen
am 23.08.2006 16:02:10 von Alex Hepp
Ulf Kadner schrieb:
> Bernhard Schimanski wrote:
>
>> SpaltenName nvarchar(500) COLLATE Latin1_General_CI_AS NULL
>
> Evtl. Ist die Collation falsch für Umlaute. Must Du halt in ner NG
> fragen in der MSSql auch das Thema ist.
Wichtig ist vielleicht auch noch zu erwähnen, dass Collations nix mit
dem character Set an sich zu tun haben... heisst, es reicht nicht, eine
collation anzugeben, um Zeichen im richtigen Charset in der DB zu
speichern, sondern eben auch das charset anpassen...
HTH
alex
Re: Umlaute in die Datenbank schreiben und lesen
am 23.08.2006 18:52:30 von Richard Baier
Hallo Bernhard,
> Meine Frage, wie kann ich die zwei fehlende Zeichen korrekt darstellen?
s.u.
> Würde der Sache etwas Helfen wenn ich in der DB die Collation ändere?
Nein.
Die Ursache Deiner Probleme liegt darin, dass Du versuchst UTF-8
kodierte Unicode Zeichen zu speichern. Die Unicode Unterstützung des SQL
Server basiert auf der UCS-2 Kodierung, die für ein Zeichen fix 2 Bytes
verwendet. UTF-8 reserviert pro Zeichen ein bis vier Bytes.
Wenn Du Deine Unicode Zeichen also in dem nvarchar Feld korrekt ablegen
möchtest, ist es erforderlich von UTF-8 nach UCS-2 zu konvertieren.
MfG Richard
Re: Umlaute in die Datenbank schreiben und lesen
am 23.08.2006 22:02:31 von Bernhard Schimanski
Hallo,
> Die Ursache Deiner Probleme liegt darin, dass Du versuchst UTF-8
> kodierte Unicode Zeichen zu speichern. Die Unicode Unterstützung des SQL
> Server basiert auf der UCS-2 Kodierung, die für ein Zeichen fix 2 Bytes
> verwendet. UTF-8 reserviert pro Zeichen ein bis vier Bytes.
>
> Wenn Du Deine Unicode Zeichen also in dem nvarchar Feld korrekt ablegen
> möchtest, ist es erforderlich von UTF-8 nach UCS-2 zu konvertieren.
Ja stimmt, bin zu gleichem Ergebnis gelangt, ich habe die xml Datei
mit Umlauten ausgelesen und in der php Datein ausgegeben.
Wo kann ich die Konvertierung umstellen? in der Datenbank oder beim
auslesen der xml Datei, damit meine ich beim lesen der xml Datei?
Grüße Bernhard
Re: Umlaute in die Datenbank schreiben und lesen - Lösung
am 24.08.2006 09:33:46 von Bernhard Schimanski
>> Wenn Du Deine Unicode Zeichen also in dem nvarchar Feld korrekt
>> ablegen möchtest, ist es erforderlich von UTF-8 nach UCS-2 zu
>> konvertieren.
Das Problem habe ich gelöst in dem ich beim auslesen aus der xml Datei
utf8_decode verwende:
....
utf8_decode($value->textContent)
....
mfg Bernhard
Re: Umlaute in die Datenbank schreiben und lesen
am 24.08.2006 09:40:01 von Richard Baier
Hallo Bernhard,
> Wo kann ich die Konvertierung umstellen? in der Datenbank oder beim
> auslesen der xml Datei, damit meine ich beim lesen der xml Datei?
die Konvertierung musst Du vor dem Insert in die Datenbank durchführen.
Mit den Multibyte String Funktionen sollte dies durchführbar sein,
mb_convert_encoding() dürfte die richtige Wahl sein.
MfG Richard