Zum Inhalt springen

Typo3 UTF8 - MySql Database Latin1 - DB-Sortierung

Erstellt am 20. März 2007 · 7 Antworten · letzte Antwort am 20. März 2007

Tags: Datenbank, Frage

Unbekannter Benutzer ·

Hallo,
unsere Frontend-Plugin-Extension für die Kochrezepte steht im Groben. Als wir nun begannen unsere Daten einzugeben (derzeit deutsch + türkisch) stellte ich fest, dass zwar die Texte korrekt im Back- und Frontend ausgegeben werden, aber das beim exec_SELECTquery abgesetzte OrderBy nicht ganz griff, die Sortierung war durcheinander. Das von mir gesetzte Collate im OrderBy wirkte sich scheinbar nicht aus. :
türkisch Ç Çilek (müsste hinter das B bzw. C)
türkisch B Biber
türkisch D Dereotu
türkisch D Domates
deutsch Ö Öl (auf jeden Fall nicht hier)
deutsch D Dill
deutsch O Olive
deutsch O Olivenöl

Die über den Kickstarter generierten MySql-Tabellen werden als Latin1 - latin1_swedish_ci generiert. Eine nachträgliche Änderung der Tabellen auf Utf8 - utf8_general_ci greift Typo3 nicht auf. Die Einstellungen der vom Provider vorbereiteten Typo3-Datenbank sind:
character_set_server latin1
collation_server latin1_swedish_ci

character_set_database latin1
collation_database latin1_swedish_ci

character_set_connection utf8
collation_connection utf8_general_ci

character_set_client utf8
character_set_results utf8
character_set_system utf8

Nachdem ich nun eine Testtabelle im phpMyAdmin angelegt und mit unterschiedlichen Set Names Inserts mit gleichen Inhalten durchgeführt hatte - meine ich folgende Schlussfolgerung ziehen zu können: Typo3 kriegt auf Tabellenebene UTF8 nicht mit und legt die Daten so ab, als wäre Latin1 eingestellt und man müsste daraus UTF8-Daten generieren. Dadurch, dass die Zeichen dann kryptisch werden, greift jegliche Sortierung nicht.

Stimmt diese Schlussfolgerung? Wenn ja, wäre dieses "Problem" behoben, wenn ich auf einer komplett auf UTF8 eingestellten Datenbank aufsetzen würde? Oder gibt es eine andere MÖglichkeit?

Gruss Mensch

steffenk ·

sobald Du das BE auf utf8 eingestellt hast, werden auch die Tabellen mit der utf8 collation erstellt. Die Sortierung stimmt.
Hast Du das nicht, wird die Tabelle mit collation latin erstellt (oder was auch immer von mysql voreingestellt ist) und ein nachträgliches Umstellen bringt nicht den gewünschten Erfolg.

Unbekannter Benutzer ·

Hallo steffenK,
dank Eurer Hilfe hatte ich ja schon vor Monaten auf [BE][forceCharset] = utf-8 gestellt. Der Kickstarter generiert mir jedoch (hab gerade nochmal eine Testextension angelegt) nur latin1_swedish_ci.
Hängt das etwa nicht doch mit dem Serverzeichensatz zusammen? Müsste dann die Folgerung nicht folgende sein: MySql-Server komplett auf utf8 stellen?
Gruss Mensch

jenses ·

Je nachdem, welche MySQL-Version läuft,
muß entweder der SQL-Server komplett auf utf-8 umgestellt werden,
in neueren Versionen kannst du das auf DB-Ebene konfigurieren.
Frag mich aber nicht wie, ich weiß nur daß...

steffenk ·

MySQL hat einen einkompilierten Zeichensatz, der auf latin_swedish steht. Den kann man auch in der Konfiguration nicht ändern.
Abhilfe kann man nur dadurch erreichen, das man die DB mit utf8 erstellt - das wird dann als default für die Tabellen benutzt.
CREATE dbname DEFAULT CHARACTER SET charset COLLATE collation

Solang die DB auf latin eingestellt ist, muss man bei neuen Tabellen immer die Collation mit angeben, soweit ich weiss macht das TYPO3-Core nicht, da TYPO3 nicht nur auf mysql ausgelegt ist.

Unbekannter Benutzer ·

Das Problem hatte sich mir bisher nicht gestellt, da Typo3 alles brav und korrekt umgewandelt hat. Erst als ich auf DB-Funktionalitäten zurückgriff, kam ja das Problem auf.
Es sind zwei Aspekte, die meines Erachtens nach hier einfliessen:
1. Typo3 für sich und UTF8
2. Typo3 im Zusammenspiel mit der MySql und UTF8

Steht Typo3 auf UTF8, so legt Typo3 die Daten auch in einer Latin1-Spalte als UTF8 an.

Die Frage ist doch, wann erkennt Typo3, dass ich mit UTF8-Daten überall arbeiten will? Entweder über den Zeichensatz character_set_server oder character_set_database - auf jeden Fall nicht über den Zeichensatz der Tabelle bzw. der Spalte.

Gruss Mensch

PS: Auch die nachträgliche Änderung der Collation und des Zeichensatzes der Tabelle auf utf8 tangiert Typo3 nicht.

jenses ·

Empfehle die Lektüre dieses Dokumentes:
Frontend Localization Guide
Danach sollte einigermaßen klar sein, wie und wann TYPO3 zwischen verschiedenen charsets wandelt und wie man ein System so einrichtet, daß es am besten ohne diese Wandelungen läuft.
Hast du eine utf-db, wird auch wunschgemäß sortiert.