Wie Zeichensätze vereinheitlichen?

  • Hallo zusammen,


    nachdem nun alle meine Seiten mit dem aktuellen Joomla und PHP 7 laufen, habe ich mir mal die DB-Tabellen genauer angeschaut.


    Die Zeichensätze der Tabellen innerhalb eines Joomlas variieren hier ziemlich:
    - utf8_general_ci
    - utf8mb4_unicode_ci
    - utf8mb4_general_ci


    Dabei ist die Datenbank auf latin1_german1_ci eingestellt. Die einzelnen Felder habe ich mir dabei noch nicht einmal angeschaut.


    Sind hier die Zeichensatz-Einstellungen der DB nicht optimal, oder ergibt sich so etwas im Laufe der Zeit, oder hängt es mit den Erweiterungen zusammen?
    Wie kann ich dies in Zukunft vermeiden?
    Und mit welchen Zeichensätzen sollte man zukünftig am sinnvollsten arbeiten, wenn man "normale" deutsche Webseiten betreibt.


    Könnte es sein, dass man aufgrund der verschiedenen Zeichensätze eine verringerte Leistungperformance hat?
    Wie lassen sich die Zeichensätze am schnellsten vereinheitlichen? Alles mühsam auf manuellem Weg?

  • Ob ich die richtigen Begriffe verwende, weiß ich nicht):


    Das Mixen stellt grundlegend kein Problem dar. utf8 und utf8mb4 sind bis auf wenige exotische Ausnahmefälle, die aber über die Fehlermeldung schnell lösbar sind, kompatibel.


    Die Datenbankkollation ist eh wurst, wenn die Tabellen, besser Felder, eh eigene festgeschriebene Kollationen haben (Stringfelder. Integer u.a. ist eh überall gleich.).


    Ich sag mal so: Die sichere Variante ist, es so zu belassen, wie es die Tabellenersteller ausgeliefert haben, außer man steht unter Druck 4-Byte-Zeichen (statt 3-Byte-Zeichen) speichern zu müssen. Wer also auf dem chinesischen Markt erfolgreich sein möchte, wird nicht drumrumkommen. Auch EmotIcon, emoji oder wie sie heißen, verwenden 4-Byte zeichen.


    Das eigentliche Problem auf das man beim einfachen Umschalten stößt, sind die maximalen Feldgrößen.


    Deshalb wurden bspw. zahlreiche Feldlängen/größen in Joomla von Standard 255 auf 400 umgestellt, weil halt utf8mb4 für den "human readable" String/Text mehr Platz braucht. Noch nicht so das Problem.


    Tricky wird es dann bei den Tabellen-Indices, die man ebenfalls anpassen muss. Die maximale Größe eines Index ist in InnoDB-Datenbanken beschränkt auf 767 bytes. Beim Anlegen eines Index wird die Länge unter utf8 auf 255 Zeichen gesetzt
    767b/3b pro Zeichen => max. 255 Zeichen passen rein


    Bei utf8mb4 darf die Länge aber max. 191 Zeichen sein
    767b/4b pro Zeichen => max. 191 Zeichen passen rein


    Warum Joomla die Index-Längen nun aber von zuvor 255 auf 100 statt 191 runter gesetzt hat, wie das z.B. Wordpress macht, keine Ahnung.


    Bisschen Aufschluss geben die Dateien in
    administrator/components/com_admin/sql/others/mysql/
    In der ersten werden die Indices gelöscht.
    In der zweiten diverse Felder vergrößert und ganz am Ende dann die verkürzten Indices neu gesetzt.


    Deshalb lasse ich vorerst die Finger davon bis die erste Fehlermeldung reportet wird ;)


    EDIT: Und da Joomla auch MySQL5.1 noch unterstützt, wo es kein utf8mb4 gibt, eh alles schwierig.


    EDIT: Gerade gefunden: Zwar nicht Joomla, http://blog.arkency.com/2015/0…pp-with-a-mysql-database/

  • Danke für die ausführliche Antwort! Zusammenfassend lässt sich also sagen, dass man mehr "kaputt machen" kann, als dass es vorteilhaft wäre, wenn man an den Zeichensätzen rumbastelt.
    Da alles reibungslos läuft, werde ich dann auch besser die Finger davon lassen.