Antwort #49 am: 13. Februar 2015, 16:07:33
Das ALTER DATABASE Statement ist meines Erachtens nicht nötig.
Das DEFAULT CHARACTER SET und das DEFAULT COLLATE sind unerheblich. Ergeblich ist der Zeichensatz der DB-
Verbindung.
Will sagen, wenn z.B. das DEFAULT CHARACTER SET der DB auf
utf8 steht, die Daten in der DB aber in
iso-8859-15 gespeichert sind (und die Collation entsprechend auf z.B.
latin1_general_ci steht), die DB-
Verbindung nun aber auf
latin1 steht (siehe die Konstante
DB_SERVER_CHARSET in den
configure.php-Dateien), gibt es keine Probleme.
Gesetzt wird die DB-
Verbindung mittels der oben genannten Konstanten in der Funktion
xtc_db_connect(), die für alle Queries an die DB benutzt wird.
Das gleiche gilt umgekehrt, wenn also der DEFAULT CHARACTER SET auf
latin1 steht jedoch die Daten in den Tabellen in
utf8 gespeichert sind und die DB-
Verbindung auf
utf8 gesetzt ist.
Die DB muß lediglich wissen in welcher Kodierung die Queries an die DB erfolgen.
Fazit:
Die Konvertierung der TABLEs in das benötigte CHARACTER SET und die benötigte COLLATION reicht völlig aus, wenn die DB-
Verbindung, also die Konstante
DB_SERVER_CHARSET entsprechend gesetzt ist. Ein ALTER DATABASE Statement um die DEFAULTs zu setzen ist nicht nötig.
Noch zur Klärung:
Um Daten in die DB in der gewünschten Kodierung zu speichern ist die Konstante
DB_SERVER_CHARSET wichtig.
Um die Daten aus der DB zu holen ebenso.
Soll die Kodierung in welcher der Shop läuft geändert werden, müssen lediglich die ALTER TABLE Statements aus dem Skript durchgeführt werden damit die bereits in der DB gespeicherten Daten in die gewünschte Kodierung umgewandelt werden.
Kommen tut das Skript von
hier.
Nötig ist also folgendes wenn man nachträglich auf UTF-8 umstellen möchte:
(! Dabei bitte die Syntax-Unterschiede beachten (
utf8 /
utf-8)
- Skript für die DB laufen lassen (ohne ALTER DATABASE Statement)
- DB_SERVER_CHARSET in den beiden configure.php-Dateien auf utf8 setzen
- Backend => Land / Steuer => Sprachen => "meta-content" ("Charset" im Bearbeiten-Modus) auf utf-8 setzen
- Wenn nicht vorhanden in den Dateien /lang/SPRACHE/SPRACHE.php die setlocale() erweitern um 'de_DE.UTF-8' bzw. 'en_GB.UTF-8'
- Evtl., je nach Server-Konfiguration, entweder in der Root-htaccess das
AddDefaultCharset UTF-8
setzen oder in den beiden application_top.php ganz oben das
ini_set("default_charset", "utf-8"); - In der aktuellen modified-Version 1.06 noch folgendes suchen:
In /includes/classes/class.inputfilter.php das
$source = html_entity_decode($source, ENT_QUOTES, "ISO-8859-1");
ändern in das
$source = html_entity_decode($source, ENT_QUOTES, strtoupper($_SESSION['language_charset']));
- Für den RSS-Feed im Backend auf der Startseite in /admin/start.php alle utf8_decode() entfernen (kommt 3 x vor soweit ich weiß)
- In evtl. eingebauten Erweiterungen, z.B. RSS-Feed, kommt es darauf an wie die Erweiterungen konfiguriert sind. Handelt es sich um XML oder CSV muß evtl. die Kodierung angepasst werden oder mittels entsprechender Funktionen (utf8_encode(), utf8_decode()) die Ausgabe modifiziert werden.
Hoffe habe nichts vergessen.
Gruß,
noRiddle