Masowa zmiana kodowania tabel w bazie MySQL

Założony przez Daniel Praźmo.

Cześć, potrzebuję pomocy. Mam bazę danych, w której tabele są kodowane w latin2_general_ci, a chciałbym je przekonwertować na utf8_general_ci.
Używam do tego następującego skryptu, który ma zwrócić gotowe zapytanie SQL do skopiowania:

<?php
set_time_limit(0);

//jezeli mamy tabele w innym kodowaniu niż na to wskazuje $convert_from to nalezy to wskazać

$convert_from = 'latin2_general_ci';
$convert_to = 'utf8_general_ci';
$character_set= 'utf8';

//zmiana kodowania tabel (true/false)
$show_alter_table = false;
//zmiana kodowania struktury tabeli (true/false)
$show_alter_field = true;

// baza danych:
$username = '';
$password = '';
$database = '';
$host = 'localhost';

mysql_connect($host, $username, $password);
mysql_select_db($database);

$rs_tables = mysql_query(" SHOW TABLES ") or die(mysql_error());

print '<pre>';
while ($row_tables = mysql_fetch_row($rs_tables)) {
$table = mysql_real_escape_string($row_tables[0]);
if ($show_alter_table) {
echo("ALTER TABLE $table DEFAULT CHARACTER SET $character_set;\r\n");
}

$rs = mysql_query(" SHOW FULL FIELDS FROM $table ") or die(mysql_error());
while ($row=mysql_fetch_assoc($rs)) {

if ($row['Collation']!=$convert_from)
continue;

if ($row['Null']=='YES') {
$nullable = ' NULL ';
} else {
$nullable = ' NOT NULL';
}

// Does the field default to null, a string, or nothing?
if ($row['Default']==NULL) {
$default = " DEFAULT NULL";
} else if ($row['Default']!='') {
$default = " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
} else {
$default = '';
}

CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
if ($show_alter_field) {
$field = mysql_real_escape_string($row['Field']);


echo "UPDATE $table SET $field = REPLACE($field, 'Ą','&amp;#260;') WHERE $field LIKE '%Ą%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ą','&amp;#261;') WHERE $field LIKE '%ą%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ć','&amp;#262;') WHERE $field LIKE '%Ć%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ć','&amp;#263;') WHERE $field LIKE '%ć%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ć','&amp;#263;') WHERE $field LIKE '%ć%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ę','&amp;#281;') WHERE $field LIKE '%ę%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ł','&amp;#321;') WHERE $field LIKE '%Ł%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ł','&amp;#322;') WHERE $field LIKE '%ł%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ń','&amp;#323;') WHERE $field LIKE '%Ń%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ń','&amp;#324;') WHERE $field LIKE '%ń%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ó','&amp;#211;') WHERE $field LIKE '%Ó%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ó','&amp;#243;') WHERE $field LIKE '%ó%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ś','&amp;#346;') WHERE $field LIKE '%Ś%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ś','&amp;#347;') WHERE $field LIKE '%ś%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ź','&amp;#377;') WHERE $field LIKE '%Ź%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ź','&amp;#378;') WHERE $field LIKE '%ź%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'Ż','&amp;#379;') WHERE $field LIKE '%Ż%'; \r\n";
echo "UPDATE $table SET $field = REPLACE($field, 'ż','&amp;#380;') WHERE $field LIKE '%ż%'; \r\n";



}
}
}

?>


Jednak po odpaleniu dostaję błąd:
Cytat:Parse error: syntax error, unexpected T_STRING in /home/***/updatedb.php on line 54

Jest to ta linia:
Kod:
CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL

Co jest z nią nie tak?
:: Akcja DZIĘKUJĘ ZA POMOC ::
Pomocy udzielam jedynie na forum. Wszystkie rzeczy wykraczające poza tą dziedzinę wykonuję odpłatnie.
TaniDedyk.pl
Czemu dajesz kod SQL do PHP? oO
Jak aj noł, wziąłem to z jakiegoś forum.
Powinno chyba być
Kod:
mysql_query(" CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ");

@edit
I tak kod jest do niczego, bo nie robi tego, co chcę : \
:: Akcja DZIĘKUJĘ ZA POMOC ::
Pomocy udzielam jedynie na forum. Wszystkie rzeczy wykraczające poza tą dziedzinę wykonuję odpłatnie.


Użytkownicy przeglądający ten wątek:

1 gości