• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Umlaute aus MySQl-DB fehlerhaft

Hesoyam

Neues Mitglied
Hallo erstmal,

zu Anfang möchte ich sagen, dass ich schon die Forensuche genutzt habe, auch etwas fand, aber die Lösung mir nicht weitergeholfen aht.

Und zwar:
Ich habe einen Serverumzug gemacht und habe dann festgestellt, dass ettliche Umlaute falsch angezeigt werden (entweder als schwarzes Viereck mit Fragezeichen; oder ü; ä; etc).
Nach den Lösungsvorschlägen hat sich das leider nicht geändert.

Auf meinem Alten Server konnte ich ohne Probleme Umlaute in die Datenbank eintragen und auf dem neuen Server funktioniert das irgendwie nicht so, wie geplant.

Vor Lösungsvorschlag:
Also ich trage in meinem ACP zb "ä" ein.
Im ACP steht "ä"
Auf der Webseite steht "ä"

Jetz:
Ich trage "ä" ein
In acp steht "ä"
auf Webseite steht "ä"

Ich verzweifel langsam weil ich an dem problem jetzt schon ne Stunde sitz und ich den Serverumzug eigentlich heute noch vom Tisch haben wollte.

Ich hoffe ihr könnt mir möglichst schnell helfen, da ich echt nicht weiss, was los ist.

Hier der Lösungsvorschlag aus diesem Forum (via Suchformular gefunden)
http://www.html.de/php/27255-wie-um...p-und-sql.html?highlight=Umlaute+aus+mysql-db
und:
Umlaute, UTF-8 und PHP: wenn Sonderzeichen falsch dargestellt werden | sjmFREELANCING Development-Blog
 
Werbung:
Welchen Zeichensatz hast Du denn auf dem alten Server verwendet und welchen auf dem neuen?
 
wie find ich das raus?!

AlIch hab das ja nur von A nach B verschoeben
also eig müsste es der selbe zeichensatz sein ... oder?
 
Werbung:
Nein, den Zeichensatz muss man in der Datenbank einstellen. Jede Tabelle in einer Datenbank hat wiederum einen eigenen Zeichensatz. Weiterhin kann es auch an der Webseite selbst liegen die nun einen anderen Zeichensatz im Header der Webseite zurück gibt. Vielleicht wäre das hier interessant für dich, vor allem der Abschnitt "Mögliche Probleme".
 
Ok
Also das stand im phpmyadmin
Neuer Server:
MySQL-Zeichensatz: UTF-8 Unicode (utf8 )
Alter Server:
MySQL-Zeichensatz: UTF-8 Unicode (utf8 )
Und meine Webseite hat im HEAD-Bereich
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Und wieso wird es dennoch falsch angezeigt, wenn es eigentlich Richtig sein müsste?
 
Werbung:
versuchs mal mit

HTML:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

Nils aka XraYSoLo
 
"Versuchen" sollte man da nichts. Wenn es um Zeichensätze geht muss man schon sehr genau prüfen.

Weitere Angriffspunkte:
- Du hast bei der Übertragung die Daten der alten Datenbank nicht als UTF8 gespeichert oder diese nachträglich als ISO bearbeitet
- Du hast die Datenbankverbindung nicht auf UTF8 gestellt
 
threadi hat recht.

Bei so einem Problem hilft es nur, bei jedem einzelnen Schritt das richtige Charset festzulegen, um möglichen Default-Annahmen entgegenzuwirken.

Wenn du folgendes mit dem richtigen Charset durchziehst, solltest du kein Problem haben.

  • header('content-type: text/html;charset=utf-8');
    Das kommt vor die erste Textausgabe deiner Seite. Ist aber nur nötig, wenn der Apache ein Default-Encoding mitbringt.
  • mysql_query("SET NAMES 'UTF-8'"); und mysql_query("SET CHARACTER SET 'UTF-8'");
  • letztlich sollte auch das PHP-Dokument selbst in UTF-8 gespeichert sein.
Gruß
Voodoo
 
Werbung:
Also wenn ich bei meiner mysl.php das mitangebe, dann is nur mist dabei rausgekommen
PHP:
<? mysql_query("SET NAMES 'UTF-8'"); und mysql_query("SET CHARACTER SET 'UTF-8'"); ?>

Ich habe auch schon einige Felder in der mysql-db als utf-8_general codiert(oder wie auch immer man das nennt) und jetzt scheint es auch zu gehen (vorher war es iwas mit latin_schwedish) ...

Und wenn ich
PHP:
<? header('content-type: text/html;charset=utf-8'); ?>
eingebe, dann sagt er, dass der header schon gesendet wurde...
und das php-doxc is mit meta tag utf-8 gespeichert ...
 
dann sagt er, dass der header schon gesendet wurde...
Das wird immer dann gesagt, wenn schon irgendeine Ausgabe an den Browser gesendet wurde. Das Senden eines headers, mittels der header()-Funktion muss als allererstes erfolgen. Selbst eine Leerzeile recht da schon aus, um diese Meldung zu erzeugen.

Leider kann ich Dir bei Deinem eigentlichen Problem nicht weiterhelfen.

Gruß thuemmy
 
Werbung:
Hi Leute,

ich hatte auch mal das Problem. Dagegen kann man "von Haus aus" wenig bis nichts machen.
Die Struktur der Datenbank mag zwar schon "korrekt" sein, es wird beim "flaschen" importieren dennoch das falsche Umlaut, was ja laut Datenbank ja keins ist, dennoch korret eingetragen bzw angezeigt. Diese Einträge wie: "ä", "ß", "Ãœ" oder "ö" sind ja in dem Sinne schon Umlaute und keine Interpretationsfehler! Da hilft auch kein-> charset = utf-8!!!

Ich habe dazu ursprünglich für mich selber ein kleines und simples PHP-Programm entwickelt welches ich gerne Bedürftigen zur Verfügung stellen könnte. Dieses durchwälzt alle Daten in der Datenbank und behebt die vermeidlich fehlerhaften Zeichensätze zu wirklich brauchbaren Umlaute!!! So wie es sein soll.....

Bei Interesse gerne melden unter dem Kontaktformular: SGW-entertainment - Internet and more


MFG Heinrich
 
ich hatte auch mal das Problem. Dagegen kann man "von Haus aus" wenig bis nichts machen.

Keine Ahnung, was du mit „von Haus aus“ meinst, aber natürlich kann man dagegen was machen. Das ist lediglich eine Frage der korrekten Verwendung von Charsets.

Die Struktur der Datenbank mag zwar schon "korrekt" sein, es wird beim "flaschen" importieren dennoch das falsche Umlaut, was ja laut Datenbank ja keins ist, dennoch korret eingetragen bzw angezeigt.

Du meinst vermutlich das Richtige, aber der Satz ist dennoch kaum verständlich.

"ä", "ß", "Ü" oder "ö" sind ja in dem Sinne schon Umlaute und keine Interpretationsfehler!

Anders gesagt: Die angesprochenen Zeichen sind UTF-8-Characters ("ä", "ß", "Ü", "ö"), dargestellt in zum Beispiel dem ISO-8859-1- oder dem Windows-1252-Zeichensatz.

Da hilft auch kein-> charset = utf-8!!!

Kommt ganz drauf an. Grundsätzlich hilft das schon (falls du den HTTP-Header meinst), ist aber in vielen Fällen nicht mehr als ein Hack.

Falls du davon sprichst, eine ISO-8859-1-Spalte, die UTF-8-Daten enthält, in der Datenbank nachträglich nach UTF-8 zu konvertieren, das mag problematisch werden, ja. Auch dort wird es aber Wege geben, sowas auf SQL-Ebene sauber hinzubekommen.

Dieses [Script] durchwälzt alle Daten in der Datenbank und behebt die vermeidlich fehlerhaften Zeichensätze zu wirklich brauchbaren Umlaute!!! So wie es sein soll.....

Ich habe eine leise Befürchtung, dass ein solches Script die Sache an der falschen Stelle anpackt.

Bei Interesse gerne melden unter dem Kontaktformular

Warum nicht einfach hier posten?
 
Ich habe eine leise Befürchtung, dass ein solches Script die Sache an der falschen Stelle anpackt.
Kommt darauf an, was das Script macht. Wenn man einen Fehler gemacht hat beim Laden der Daten und die nachträglich dann in der Datenbank korrigiert, so halte ich das für legitim. Wenn man aber die falsch gespeicherten Daten vor der Nutzung hinbiegt und die Ursache (das falsche Speichern) nicht beseitigt, dann macht man etwas an der falschen Stelle.
 
Werbung:
Wenn man einen Fehler gemacht hat beim Laden der Daten und die nachträglich dann in der Datenbank korrigiert, so halte ich das für legitim

Wenn UTF-8-Inhalt versehentlich in eine Nicht-UTF-8-Spalte geraten ist:

Code:
ALTER TABLE `table` CHANGE `field` `field` BLOB;
ALTER TABLE `table` CHANGE `field` `field` TEXT CHARACTER SET 'utf8';

- MySQL :: MySQL 5.0 Reference Manual :: 12.1.4 ALTER TABLE Syntax (Ganz unten vor den Kommentaren.)

Ändert das Charset der Spalte, ohne zu konvertieren (Binärstruktur der Daten bleibt intakt).

Ich bleibe bei meiner Einschätzung.
 
Zurück
Oben