Konwersja bazy. - Michał Sternadel Konwersja bazy.

Światło: Zapal | Zgaś

Konwersja bazy.

Dodano: 01.10.2007, 00:23:21

Wreszcie! Wczoraj o 4:34 rano dwie, najczęściej odwiedzane witryny w pracy pracują na osobnych, w pełni zoptymalizowanych bazach danych. Przedtem, na skutek nie do końca autoryzowanych działań webmasterów strony były połączone jedną, wielką bazą danych. Kiedyś serwer mysql uległ awarii i trzeba było przeinstalować cały mysqld -- wtedy to posypały się polskie literki, a bazę musiałem przekonwertować na binarną, bo Strona ma działać, już! Konwersje na różne sposoby nie wychodziły. Dobrym sposobem byłoby użycie iconv, ale wykrzaczał się przy "ó", lepszym, ręczna konwersja w edytorze, ale mój sprzęt nie dałby sobie rady z 10mb danych tekstowych. Ostatnio wpadłem na pomysł, aby napisać konwerter w głupim PHP. Może komuś przyda się do czegoś, więc wkleję:

$db=mysql_connect("localhost","user","haslo");
$selectdb=mysql_select_db("bazabinarna") or die("Pipcę, nie robię!");
mysql_query('SET NAMES utf8');
$naprawianabaza="bazanaprawiana";
function mysql_iconv($string, $from, $to) {
$character_set_database = mysql_result(mysql_query("SELECT @@character_set_client"),0,0);
$character_set_results = mysql_result(mysql_query("SELECT @@character_set_results"),0,0);
mysql_query("SET character_set_client=$from");
mysql_query("SET character_set_results=$to");
$string_escaped = mysql_real_escape_string($string);
$converted_string = mysql_result(mysql_query("SELECT '$string_escaped'"),0,0);
mysql_query("SET character_set_client=$character_set_database");
mysql_query("SET character_set_results=$character_set_results");
return $converted_string;
}
function mysql_fetch_all($query, $kind = 'assoc') {
$result = array();
$kind = $kind === 'assoc' ? $kind : 'row';
eval('while(@$r = mysql_fetch_'.$kind.'($query)) array_push($result, $r);');
return $result;
}
$i=0;
$pytanietabele="show tables";
$result = mysql_query($pytanietabele);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $col_value)
{
$tabelka=mysql_iconv($col_value,"latin2","utf8");
$pytanieodanewtabeli="select * from $tabelka limit 10";
$result2 = mysql_query($pytanieodanewtabeli);
while ($line2 = mysql_fetch_array($result2, MYSQL_ASSOC))
{
$dane.="INSERT INTO `$naprawianabaza`.`$tabelka` VALUES (";
foreach ($line2 as $col_value2)
{
$dane.="'";
$kolumna=mysql_escape_string($col_value2);
$dane.=mysql_iconv($kolumna,"latin2","utf8");
$dane.="', ";
} //foreachline2
$dane = rtrim($dane, ", " );
$dane.=");";
$dane.="
";
mysql_query($dane) or die(mysql_error());
$dane="";
$i++;
} // while line2
}
}
echo "Wykonano $i zapytan.";
?>

Przed wykonaniem skryptu należy utworzyć strukturę w nowej bazie danych. Ja jestem wreszcie zadowolony.


Dodaj komentarz

Szybki kontakt:

Pozostaw zółtą karteczkę-wlepkę pod adresem:
Kraków, ul. Pawia 3 z id: #776AFFDA# oraz wiadomością. Jak nie zginie -- odczytam.

Ostatnie fotografie


Paproć
Paproć

Grzyb
Grzyb

  Więcej...