Rolf B: mysql, Umlautproblem

Beitrag lesen

Hallo Jörg,

Soll heißen, wenn ich sicherstellen kann, dass ich ausschließlich latin1-Zeichen verwende, könnte ich alles connection, db und Felder konfigurieren, wie ich will?

Du hast diverse Freiheiten, aber abhängig von deinen Entscheidungen musst Du natürlich die Folgen tragen.

Wenn Du Dir sicher bist, dass Du nur Zeichen aus dem Latin-1 Zeichensatz verwendest, dann:

  • kannst Dir in der DB aussuchen, ob Du DB oder Felder latin-1 oder UTF-8 einstellst.
  • kannst Dir in PHP aussuchen, ob Du Strings in Latin-1 oder UTF-8 verarbeiten möchtest.

Und abhängig von deiner PHP Entscheidung sagst Du MySQL, welchen Zeichensatz es auf der Connection verwenden soll. Der MySQL Treiber und Server führen dann die erforderlichen Konvertierungen durch.

Wenn Du Dich im PHP für Latin-1 entscheidest, hast Du den Vorteil, jegliche Strings mit den "klassischen" Stringfunktionen verarbeiten zu können.

Du hast aber den Nachteil, dass Du jegliche Kommunikation mit dem Browser zwischen UTF-8 und Latin-1 wandeln musst, oder Du setzt Dich über die HTML 5 Spezifikation hinweg. Die verlangt nämlich charset=UTF8. Eine ISO-8859-1 (Latin-1) Kommunikation mit dem Browser funktioniert zwar, weil die Browser sich die Bits und Bytes für Kompatibilität verbiegen, aber man weiß nie, wann aus "deprecated" oder "obsolete" ein "removed" wird.

Die bessere Lösung ist meiner Meinung nach, im PHP sauber und modern mit UTF-8 zu arbeiten und auch per UTF-8 mit der DB zu kommunizieren. Du musst dann allerdings jeden String, den Du zur latin-1 DB schicken möchtest, darauf überprüfen, ob er Zeichen außerhalb des Latin-1 Zeichensatzes enthält. Oder eben die Fragezeichen in Kauf nehmen, die bei einem ungültigen Zeichen in der Datenbank erscheinen.

Eine Überprüfung kannst Du mit iconv durchführen. Das liefert FALSE, wenn ein unkonvertierbares Zeichen drin ist.

Man könnte nun einwenden, dass man dann auch gleich die Connection zur latin1 DB auf latin1 setzen. Sehe ich anders. Denn dann musst Du auch alles, was Du von dort liest, und jedes SQL Statement, das Du hinschickst, durch den iconv jagen.

Rolf

--
sumpsi - posui - obstruxi