PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Forum Kollation für Update auf vb4 per PHP erledigen



MK|breaker
19.01.2010, 14:07
ca 100 Tabellen will bestimmt kein mensch per Hand ändern.....ich hänge hier mal das Script mit an...sonst stehen andere genau so da wie ich am Anfang ;)

PS. Die Datei sollte nach dem erfolgreichen Updaten wieder gelöscht werden ;)




<?php

/////////////////////////////////////////////////////////
// gebaut fuer vbulletin-update v3.8.x auf 4.x.x
// kollation der tabellen eines vbulletin-boardes aendern
//
// powered by www.wittesoft.de @ breaker
/////////////////////////////////////////////////////////

$db_host = 'localhost'; // datenbank-host
$db_user = 'xxxxxxxx'; // datenbank-user
$db_pass = 'xxxxxxxx'; // datenbank-passwort
$db_name = 'xxxxxxxx'; // datenbank-name
$query_seite = 2; // querys pro seite (2 ist nicht verkehrt, da es auch grosse tabellen gibt und
// diese sonst beim wandeln an das php_timeout stossen koennten)
$tabelle_ueberspringen = 'vb_postindex'; // das ist bei mir die groesste tabelle in der ganzen datenbank
// von dieser tabelle bitte auch die kollation nehmen und hier bei "collation" eintragen
$kollation = 'latin1_german2_ci'; // die default-kollation fuer die tabellen
$charset = 'latin1'; // charakter-set fuer die datenbank


// mysql-connect
@mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
// datenbank auswaehlen
mysql_select_db($db_name) or die(mysql_error());

// navigation initialisieren
if (isset($_GET['step']) && is_numeric($_GET['step']))
{
$step = $_GET['step'];
if ($step > 0)
{
// seiten-anzahl errechnen
$step = $step * $query_seite;
}
}
else
{
// initialisieren von counter und navi
$i = 0;
$step = 0;
}

// show-tables der datenbank (sollten wir eigentlich abgeschaltet haben) ;)
$sql1 = mysql_query('SHOW TABLES') or die(mysql_error());
// array der tabellen durchlaufen
while ($res1 = mysql_fetch_assoc($sql1))
{
$i++;
if ($i >= $step && $i < ($step + $query_seite))
{
// oben genannte tabelle ueberspringen
if ($tabelle_ueberspringen != $res1['Tables_in_' . $db_name])
{
// tabellen der datenbank aendern
$sql2 = mysql_query("ALTER TABLE " . $res1['Tables_in_' . $db_name] . " DEFAULT CHARACTER SET '" . $charset . "' COLLATE '" . $kollation . "'") or die(mysql_error());
echo $res1['Tables_in_' . $db_name] . "\n\r";
}
}
}

// navigation nach dem update anzeigen
echo '<div style="margin-top: 30px;"><a href="' . $_SERVER['PHP_SELF'] . '?step=' . ($_GET['step'] + 1) . '">Naechste Seite</a></div>';

?>

Kolbi
19.01.2010, 15:32
Was ist mit der mysql_char.php von vB?

MK|breaker
19.01.2010, 16:25
Was ist mit der mysql_char.php von vB?

Was ist mit dieser Datei? Wo finde ich die?

Mein Script (oben) soll ja nur das Problem der manuellen Umstellung lösen: http://www.vbulletin-germany.com/forum/showthread.php?45959-Kollation-der-Datenbank-mit-phpMyAdmin-berprfen&p=288990

Kolbi
19.01.2010, 17:33
Ich bin ja auch froh, dass du nochmal ein Skript geschrieben hast :)

Aber eigentlich gab es dies schon von vBG: http://www.vbulletin-germany.com/forum/showthread.php?25037-Kollation-auf-einmal-umstellen&p=176559&viewfull=1#post176559

MK|breaker
19.01.2010, 18:29
Achso...das wusste ich ja nicht ;)

Kolbi
19.01.2010, 18:52
Ist ja auch kein Thema

Gespenst
22.01.2010, 22:54
Ich wollte Heute eigentlich mein vB auf 4.0.1 Updaten. Leider musste ich feststellen das sich im laufe der Jahre verschiedene Kollationen eingeschlichen haben.
Bis jetzt lief alles Gut aber vB 4 kommt damit nicht zurecht. Ich habe mit dem Converter (http://www.vbulletin-germany.com/forum/showthread.php?25037-Kollation-auf-einmal-umstellen&p=176559&viewfull=1#post176559) von Mystics versucht die Datenbank auf einen Standard zu bringen. Allerdings gab es ständig Fehlermeldungen.
Dann habe ich es mit dem Skript von MK|breaker Probiert. Da Gab es Keine Fehlermeldungen und alles sieht in vB 3.8.2 noch Gut aus. Wenn ich nun wieder das Skript von Mystics (zur gegen probe) benutzt um die Tabellen zu Analyseren habe ich wieder alle drei Standards im Angebot:

latin1_german1_ci
latin1_german2_ci
latin1_swedish_ci

Da vB 3 anscheint besser mit solchen Unterschieden klar kommt ist bei vB 4 Schluss.
Wie bekomme ich die vor dem Update auf eine Kollation?

Pathor
22.01.2010, 23:00
Auch ein vB3 hat Probleme mit unterschiedlichen Kollationen (ich hatte auch mal ein Problem damit im vB3 ;)). Der gängigste Fehler ist es neue Tabellen anzulegen (was ja bei einem Upgrade aud vB4 gemacht wird), die eine andere Kollation besitzen, als die alten Tabellen.

Lesen -> http://www.vbulletin-germany.com/forum/showthread.php?45959-Kollation-der-Datenbank-mit-phpMyAdmin-berprfen

MK|breaker
23.01.2010, 02:51
Ich wollte Heute eigentlich mein vB auf 4.0.1 Updaten. Leider musste ich feststellen das sich im laufe der Jahre verschiedene Kollationen eingeschlichen haben.
Bis jetzt lief alles Gut aber vB 4 kommt damit nicht zurecht. Ich habe mit dem Converter (http://www.vbulletin-germany.com/forum/showthread.php?25037-Kollation-auf-einmal-umstellen&p=176559&viewfull=1#post176559) von Mystics versucht die Datenbank auf einen Standard zu bringen. Allerdings gab es ständig Fehlermeldungen.
Dann habe ich es mit dem Skript von MK|breaker Probiert. Da Gab es Keine Fehlermeldungen und alles sieht in vB 3.8.2 noch Gut aus. Wenn ich nun wieder das Skript von Mystics (zur gegen probe) benutzt um die Tabellen zu Analyseren habe ich wieder alle drei Standards im Angebot:

latin1_german1_ci
latin1_german2_ci
latin1_swedish_ci

Da vB 3 anscheint besser mit solchen Unterschieden klar kommt ist bei vB 4 Schluss.
Wie bekomme ich die vor dem Update auf eine Kollation?

Hallo, das beste ist wohl, wenn du den Charset/Kollation von der grössten Tabelle in der Datenbank nimmst, das wird die "vb_postindex" sein...ist in meinem Script aber schon eingestellt ;)

Gespenst
23.01.2010, 17:05
Die Tabelle ist in meiner DB Leer.

EDIT:
Ich habe mir die Tabellen über MySqlDumper angesehen. Laut dem sind alle nun im latin1_german2_ci Format. Kann es sein das dass Tool von Mystics auf Daten einer vorherigen Analyse zurückgreift und somit der Unterschied zustande kommt?

EDIT 2: Habs mit viel Glück hin bekommen. Trotzdem Danke ;)