Einzelne Tabellenkollation ändern / eine Tabelle als UTF8-MB4 anlegen
Hallo zusammen, nächste Quizfrage aus meiner Ecke: Ist es bei Contao (3.5) möglich bei vereinzelten Tabellen ein anderes Schema einzustellen, als bei den anderen?
In meinem Fall habe ich die Datenbank so installiert, wie es bei Contao voreingestellt war (Datenbank: utf8_general_ci / InnoDB, Tabellen: utf8_general_ci / MyISAM). Nun habe ich die Anforderung in einer Tabelle Sonderzeichen wie z.B. Emojis zu speichern. Da hierfür 4 Bytes pro Zeichen benötigt werden, soll die Tabelle die Kollation utf8mb4_unicode_ci bekommen.
Mein Vorgehen (naiv wie ich manchmal bin) sah so aus, dass ich einfach die gesamte Datenbank auf diese Kollation umstellen wollte. Hier gab es aber diverse Probleme. Der Datenbank-Updater und das Install-Tool meckerten sofort rum, dass sämtliche Tabellen aktualisiert werden und auch einige Indizes gelöscht werden müssten. Ein manuelles Umwandeln der Tabellen brachte auch nur bedingte Erfolge. Dazu kommt, dass ich noch weitere Plugins nutze, die mit dem Schema ebenfalls Probleme zu haben scheinen.
Daher die Frage: Gibt es die Möglichkeit im DCA oder so anzugeben, dass nur Tabelle X eine andere Kollation erhalten soll und die übrigen unangetastet bleiben? Ich habe die eine Tabelle schon mal im phpmyadmin auf besagte Kollation umgestellt. Interessanter Weise beschwert sich der Datenbank-Updater auch nicht. Jedoch scheinen meine Emojis dennoch nicht korrekt in der Tabelle gespeichert zu werden. Ich vermute, weil Contao nach wie vor in den normalen utf8 Zeichensatz konvertiert oder so.
Hat jemand eine Idee wie ich diesen Sonderfall lösen kann bzw. diese eine Tabelle gesondert behandeln kann?
Liste der Anhänge anzeigen (Anzahl: 1)
Nope, das hatte ich jetzt bewusst nicht gemacht. Ich wollte ja gerne herausfinden, ob es auch möglich ist, nur eine Tabelle zu ändern und den Rest im Originalzustand zu lassen.
Ich habe in einer sauberen Contao Installation (ohne weitere Plugins) nochmal alles wie oben beschrieben nachgestellt und zusätzlich händisch alle Tabellen auf utfmb4_unicode_ci gestellt.
Nach einer Aktualisierung der DB und dem Hinzufügen der folgenden Felder in die dcaconfig.php
PHP-Code:
$GLOBALS['TL_DCA']['tl_files']['config']['sql']['keys']['path'] = 'index(250)';
$GLOBALS['TL_DCA']['tl_member']['config']['sql']['keys']['email'] = 'index(250)';
$GLOBALS['TL_DCA']['tl_user']['config']['sql']['keys']['email'] = 'index(250)';
$GLOBALS['TL_DCA']['tl_version']['config']['sql']['keys']['fromTable'] = 'index(250)';
$GLOBALS['TL_DCA']['tl_newsletter_recipients']['config']['sql']['keys']['email'] = 'index(250)';
sind auch fast alle Fehlereinträge verchwunden. Lediglich die tl_search scheint noch Probleme zu bereiten:
Anhang 20141
Beim Aktualisieren der DB erscheint folgende Fehlermeldung:
PHP-Code:
Fatal error: Uncaught exception Exception with message Query error: Specified key was too long; max key length is 1000 bytes (ALTER TABLE `tl_search` CHANGE `url` `url` varchar(255) NOT NULL default '';) thrown in system\modules\core\library\Contao\Database\Statement.php on line 295
Muss bei dieser Tabelle der Index noch wieder anders behandelt werden?
Bis hierhin ist dann aber sonst alles so wie du gesagt hattest. Ich müsste in einem nächsten Schritt dann testen, ob ich die ausstehenden Probleme mit meiner anderen Contao Instanz, bei der noch weitere Plugins installiert sind, auch zu lösen sind.