Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

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:
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.
Czemu dajesz kod SQL do PHP? oO
Jak aj noł, wziąłem to z jakiegoś forum.
Powinno chyba być
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:

2 gości