Bei älteren Installationen sind die meisten Tabellen noch MyISAM und das führt zum Beispiel bei einem Setup auf die neueren Versionen zu einem MySQL Fehler mit Abbruch des Setup Vorganges, weil der 1000 byte Speicher (MyISAM) für Indexe dank UTF-8 Zeichensatz nicht mehr reicht.
InnoDB hat von Haus aus mehr Speicher dafür zur Verfügung und dann klappt das mit dem Setup reibungslos.
Dafür aber sollten vor dem Setup alle Tabellen bereits InnoDB sein.
* wer das von Hand mal gemacht hat, klickt sich blöde bis alle Tabellen InnoDB sind und hat danach einen Mausarm.
Also darum mein Modulcode, für das ich absolut keine Garantie übernehme, versteht sich, das alle MyISAM Tabellen in der aktuellen Contenido DB findet und in InnoDB umwandelt.
Was muss man dafür tun?
Man nehme den Code, erzeuge ein neues Modul und füge den in den OUTPUT ein, geben dem einen passenden Namen und speichere es als "content"-Modul ab.
Dann erzeugt man eine Vorlage, fülle dieses und jenes Modul für Navi, Überschrift ein oder auch nicht, aber Hauptsache, das Modul wird in einem freien content-Container eingefügt.
Danach erstellt man sich in einer unbedeutenden Kategorie (Systemseiten z.B.) einen Artikel (nicht Startartikel) mit dieser Vorlage, macht den online aber nicht durchsuchbar und nicht durch Google indexierbar und benützt in den Artikel "Eigenschaften" den Artikellink und "öffnet" die Seite.
Dort wird im besten Fall dann was angezeigt und fertig.
Einmal sollte reichen.
Kontrolliert werden sollte das noch in der DB mittels phpmyadmin zum Beispiel, weil wie gesagt, keine Verantwortung für meinen Code.
Und ja, den Code kann man verbessern, werd ich vermutlich auch noch aber es musste schnell gehen, kennt ihr ja.
Code: Alles auswählen
<?php
/**
* Frank Koenig (dfabig.de)
* 04.08.2023
* Version 0.3
* Contenido 4.10.2-dev
*/
// Init vars and objects
$config = cRegistry::getConfig();
$DB1 = cRegistry::getDb();
$DB2 = cRegistry::getDb();
// Code starts here
$databasename = $config['db']['connection']['database'];
$sql1 = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '".$databasename."'
AND ENGINE = 'MyISAM'";
$DB1->query($sql1);
$numbers = $DB1->numRows();
if ($numbers > 0) {
$i = 0;
$j = 0;
$names = array();
while($DB1->nextRecord()) {
$tablename = $DB1->f(0);
$sql2 = "ALTER TABLE `".$tablename."` ENGINE=INNODB";
$names[] = $tablename;
if($DB2->query($sql2)) {
$i++;
} else {
$j++;
}
}
echo "<br>".$numbers." of Tables with MyISAM were found<br>";
echo '<pre>';
print_r($names);
echo "</pre>";
echo "<br>Finished";
echo "<br>succes ".$i;
echo "<br>failed ".$j;
} else {
echo "No MyISAM Tables were found";
}
?>