dedlfix: utf8 und latin gemischt?

Beitrag lesen

Hi!

[mysqld]
default-character-set = utf8
character-set-server = utf8
collation-server= utf8_general_ci

default-character-set kannst du weglassen, das ist nicht mehr aktuell und von character-set-server abgelöst. Lässt du beides drin, ist das doppelt gemoppelt.

init_connect = SET NAMES utf8

Das ist überflüssig, weil du sowieso den Server auf UTF-8 stehen hast. Verbindungen werden immer mit der Default-Kodierung des Servers erstellt. (Was dann individuell ausgehandelt wird steht auf einem anderen Blatt.)

Auf dem MySQL Server läuft noch eine andere alte DB "testdbALT" und auf dem Apache eine weitere alte WebAndwendung die beide noch in Latin1 bzw. iso-8859-1 laufen.

Soweit kein Problem.

Ich bekam nun Probleme mit dieser Anwendung weil ja generell über den Apache und PHP bzw. der my.ini IMMER alles in UTF übertragen wurde. So konnte ich mich z.b. nicht einloggen (User Login mit Passwörter)
Die Frage ist nun: Wie kann es erreichen (zumindest auf dem Testsytem mit der Entwicklungsumgebung) das man utf8 und ISO gemischt laufen lässt?

Ein Mischbetrieb stellt im Prinzip kein Problem dar. Die Apache-Konfiguration lässt sich verzeichnisfein vornehmen. Wenn AddDefaultCharset nicht sowieso schon auf die mit PHP erzeugten text/html-Ressourcen wirkt, dann wäre ebenfalls eine Konfiguration im Verzeichnis empfehlenswert. Läuft PHP als Modul, kann man mit php_value php.ini-Werte ändern. Für CGI-Betrieb kann eine eigene php.ini pro Verzeichnis erstellt werden (die dann exklusiv gilt).

Alle Änderungen in der my.ini, php.ini und httpd.conf rückgängig gemacht.
Dafür in der neuen UTF8 Anwendung die mit der UTF8 DB arbeitet nach der PDO Verbindung
$DBO->query("SET NAMES 'utf8'");
$DBO->query("SET CHARACTER SET 'utf8'");
$DBO->query("SET collation_connection = utf8_unicode_ci");

Bitte verwende nur SET NAMES. SET CHARACTER SET ist in den meisten Fällen unnötig bis schädlich. Obendrein ist die Verwendung von SET NAMES _und_ SET CHARACTER SET sinnlos, weil beide die gleichen Parameter einstellen, nur eben mit unterschiedlichen Werten.

Jede Anwendung sollte sich ihre benötigte Kodierung (und auch Kollation) auf der Verbindung selbst einstellen und sich nicht auf einen Default-Wert verlassen. Besonders bei Mischbetrieb ist das empfehlenswert. Wenn nun eine oder mehrere Anwendungen von einer bestimmten Einstellung ausgehen und sich nicht umschreiben lassen, muss man halt diese Einstellung als Default-Wert nehem. Die anderen Anwendungen müssen sich dann selbst ihre individuellen Wünsche aushandeln.

Ich bin mir aber nicht 100% sicher, ob ich irgend etwas übersehen habe, bzw. ob es andere Lösungswege gibt?

Du kannst das so machen, wie du es jetzt hast (und meine Hinweise beachten).

Wie gesagt: Dies ist nur meine Entwicklungsumgebung. Später in Produktivumgebung wird alles auf UTF8 laufen.

Auch wenn das später vorgesehen ist, würde ich die Einstellungen jeweils individuell vornehmen. Vielleicht kommt ja doch noch was altes unflexibles mit auf die Maschine.

Lo!