Pierre: Zeichenkodierung zwischen PHP und MySQL

Beitrag lesen

Hallo,

ich habe ein merkwürdiges Problem mit Zeichenkodierungen beim Speichern eines Strings in MySQL mit PHPs PDO.

Ich verwende PHP 5.2.0 und MySQL 5.0.51a

Ich mache folgenden Insert mittels PDO:
insert into table (text) values ('1:0 Ä')

Als Ergebnis steht dann in der Datenbank "1? Ä". Wenn ich das mit irgendeinem anderen Zeichen als "Ä" mache, steht korrekt "1:0" in der Datenbank, aber bei Ä nicht. Die Daten sollten in UTF-8 vorliegen.

Wenn ich die gleiche insert-Anweisung übrigens per CocoaMySQL (bin auf 'nem Mac) ausführe, dann steht das korrekte Ergebnis in der Datenbank.

Also ist das wahrscheinlich ein Zeichensatzproblem, oder? Ich bin damit leider nicht so bewandert. Aber nach dem Connecten und vor dem Insert setze ich die folgenden Anweisung an die Datenbank ab:
"SET NAMES utf8"
"SET CHARACTER SET utf8"

Also sollte die Kommunikation zwischen Script und Server eigentlich laufen dachte ich.

Meine Zeichensatzdefinitionen sind:
character_set_client  utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results  utf8
character_set_server  latin1
character_set_system  utf8
collation_connection  utf8_general_ci
collation_database  latin1_swedish_ci
collation_server  latin1_swedish_ci

Das Problem, dass ":zahl", also z.B. ":3", zu einem Fragezeichen konvertiert wird, tritt auch auf, wenn ich einen HTML-Link im String habe:
<a href="http://www.seite.de/index.php?var1=irgendwas&var2=irgendwas" target="blank">irgendwohin</a>

Was vielleicht noch wichtig ist in Verbindung mit dem Link: Der String ist mit magic_quotes escaped. Ich habe versucht mysql_real_escape_string() zu verwenden, aber da erhalte ich einen leere String zurück.

Wenn ich mit PHPs stripslashes()-Funktion alle Slashes entferne, tritt das Problem übrigens nicht mehr auf, aber das ist natürlich alles andere als sicher um es in einer SQL-Anweisung zu verwenden.

Noch eine Kleinigkeit: Wenn ich einen Text mit mehreren Absätzen (zwei Zeilenumbrüche gelten für mich jetzt mal als neuer Absatz) habe, tritt das Problem "1:0" -> "1?" IMMER NUR im ersten Absatz auf.

Ich wäre froh, wenn mir jemand helfen könnte, ich weiß nämlich nicht mehr so recht weiter.

Danke und beste Grüße,
Hadubard