Bestehende CONTENIDO Seiten auf UTF-8 umstellen

Früher gab es CONTENIDO Installationen, die mit der Kodierung ISO-8859-1 liefen, in der Inhalte mit dieser Kodierung in der Datenbank abgelegt wurden. Daher kann es zu Problemen kommen, wenn man diese Installationen auf eine neuere CONTENIDO Version (z.B. CONTENIDO 10.*) mit UTF-8 aktualisiert.

Im folgender Anleitung werden die Schritte beschrieben, mit denen man die Umstellung der Datenbankinhalte auf UTF-8 recht einfach realisieren kann.

Datenbank exportieren

Die Datenbank mit einer Datenbank-Administrationsoftware (z.B. phpMyAdmin) oder mit mysqldump exportieren. Mit mysqldump geht das in der Kommandozeile wie folgt:

mysqldump -u user -p database > db_export.sql

Wichtig:
Eine Sicherung der Exportdatei db_export.sql machen, damit man für alle Fälle den Originalstand der Datenbankinhalte hat.

Exportdatei umkodieren

Falls die Exportdatei db_export.sql nicht die Kodierung utf8 hat, muss man den Inhalt der Datei auf utf8 umstellen.

Unter UNIX geht das mit folgendem Befehl:

iconv -f ISO-8859-1 -t UTF-8 db_export.sql

Unter Windows kann man dafür GitBash, MinGW, Cygwin, usw. benutzen, die eine Unix-ähnliche Umgebung unter Windows anbieten oder das Windows-Subsystem für Linux (WSL), falls man das in Windows installiert hat.

Alternativ kann man die Exportdatei auch mit Editoren umkodieren, z. B. mit Notepad++ über das Menü "Encoding > Convert to UTF-8".

Exportdatei anpassen

Alle CREATE TABLE Anweisungen anpassen, also vorhandene Angaben wie CHARSET=latin1 mit CHARSET=utf8 ersetzen.

Entweder über die Kommandozeile (UNIX) mit folgendem Befehl:

sed 's/CHARSET=latin1/CHARSET=utf8/' db_export.sql > db_export_utf8.sql

Oder in einem beliebigen Editor mit Suchen und Ersetzen.

Neue Datenbank anlegen

Die vorhandene Datenbank löschen und eine neue Datenbank anlegen. Sicherstellen, dass die neue Datenbank den Zeichensatz utf8 und die Kollation utf8_general_ci hat. Ändern kann man das wie folgt:

ALTER DATABASE datenbank_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Zeichensatz der Datenbankverbindung konfigurieren

In CONTENIDO die Datei {installations_pfad}/data/config/{umgebung}/config.php öffnen und falls nötig, die Einstellung der Datenbankverbindung auf utf8 anpassen.

$cfg['db'] = [
    'connection' => [
        ...
        'charset'  => 'utf8', // (string) The charset of connection to database
        ...
    ],
    ...
];

Man kann die Kodierung auch in der MySQL Konfiguration (my.cnf oder my.ini) wie folgt setzen:

[client]
default-character-set=utf8

Allerdings überschreibt der in der CONTENIDO Konfiguration gesetzte Wert diese Einstellung. Will man das nicht, kann man in der config.php den Wert für 'charset' leer lassen, z. B. 'charset' => ''.