Webservice in UTF-8 in MySQL speichern
swissberg
- perl
Hallo zusammen,
Habe ein Problem mit UTF-8, dass ich einfach nicht in den Griff kriege. Folgendes Szenario:
Skript 1 ruft über einen Webservice (SOAP::Lite;) Daten ab und speichert sie in ein MySQL-Table. Der Werbservice liefert UTF-8 und so stehen die Daten auch in der DB.
Skript 2 liest die Daten wieder aus der DB und schickt sie aufs Web. Mit "$string = decode('UTF-8',$db_string);" klappt die Ausgabe auch ganz wunderbar. Soweit also alles i.O.
Da ich aber die Daten viel häufiger ausgebe als einlese und mittlerweile die Daten auch sonst noch weiterverarbeiten möchte, hab ich probiert die Daten vor dem Schreiben in die DB umzuwandeln. Hab diverse Versionen von decode/encode probiert, aber entweder steht weiterhin utf-8 in der Tabelle oder sonst ein "Schrott" nur nie latin1 :-(. Irgendwo mach ich einen Denkfehler oder überseh etwas. Aber WO?
Gruss Klaus
Eine Frage:
In welchem Sinne stellt Perl dir Hürden in den Weg, auch UTF8 Zeichen zu verarbeiten?
Musst du eine ältere Per(l)version verwenden? ( perl 5.6 -- )
Ausgabe ans Web von utf8 ist optimal.
mfg Beat
--
hier könnte Ihre Werbung stehen
Eine Frage:
In welchem Sinne stellt Perl dir Hürden in den Weg, auch UTF8 Zeichen zu verarbeiten?Musst du eine ältere Per(l)version verwenden? ( perl 5.6 -- )
Ausgabe ans Web von utf8 ist optimal.
mfg Beat
hier könnte Ihre Werbung stehen
Perlversion ist 5.008004. Und nur wegen einer Table auf UTF-8 umzustellen ist doch ein bisschen umständlich oder?
Da ich aber die Daten viel häufiger ausgebe als einlese und mittlerweile die Daten auch sonst noch weiterverarbeiten möchte, hab ich probiert die Daten vor dem Schreiben in die DB umzuwandeln.
Sofern du eine aktuelle MySQL-Version benutzt, ist das unnötig oder sogar kontroproduktiv, da MySQL sehr gut mit unterschiedlichen Zeichensätzen bzw. -kodierungen umgehen kann. Stelle den Zeichensatz für die Datenbankverbindung beim Schreiben auf utf-8 und beim Auslesen auf iso-8859-1, beide Richtungen lassen sich mit character_set_client bzw. character_set_results auch separat festlegen.
Die Datenbank sollte die Daten davon unabhängig immer in einem Unicode-Format, zumeist utf-8, sichern, um die weitesten Möglichkeiten zu haben.
Da ich aber die Daten viel häufiger ausgebe als einlese und mittlerweile die Daten auch sonst noch weiterverarbeiten möchte, hab ich probiert die Daten vor dem Schreiben in die DB umzuwandeln.
Sofern du eine aktuelle MySQL-Version benutzt, ist das unnötig oder sogar kontroproduktiv, da MySQL sehr gut mit unterschiedlichen Zeichensätzen bzw. -kodierungen umgehen kann. Stelle den Zeichensatz für die Datenbankverbindung beim Schreiben auf utf-8 und beim Auslesen auf iso-8859-1, beide Richtungen lassen sich mit character_set_client bzw. character_set_results auch separat festlegen.
Die Datenbank sollte die Daten davon unabhängig immer in einem Unicode-Format, zumeist utf-8, sichern, um die weitesten Möglichkeiten zu haben.
Ich hab MySQL-Version 4.0.24. Nehme an das verkompliziert die Sache.