Autor Zpráva
Rash
Profil *
V DB mám znaky jako Ã, é, Å™, č, Ä› atd.
Někdo mi poradil, že to mám opravit použitím následujících příkazů:

alter table TABLE_NAME modify FIELD_NAME blob;
alter database DATABASE_NAME charset=utf8;
alter table TABLE_NAME modify FIELD_NAME varchar(255) character set utf8;


Problém je ten, že tabulek mám v db strašně moc a udělat to ručně je nad mé síly. :(
Nevíte, jak to zautomatizovat?
Kajman_
Profil *
Nevíte, jak to zautomatizovat?
http://php.vrana.cz/prevod-kodovani-mysql.php
Rash
Profil *
Dík za link, ale moc se v tom nevyznám - nepatřím mezi php guru.
Jak to spojím s DB? Autor to nemá nijak vysvětlené.


[/pre]

<?php
if ($argc != 3 || !mysql_select_db($argv[1])) {
    exit("Usage: php $argv[0] db collation\n");
}
$collation = $argv[2];

function mysql_convert($query) {
    //~ echo "$query;\n";
    $return = mysql_query($query);
    echo mysql_error();
    return $return;
}

mysql_convert("ALTER DATABASE $argv[1] COLLATE $collation");
$result = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_row($result)) {
    mysql_convert("ALTER TABLE $row[0] COLLATE $collation");
    $result1 = mysql_query("SHOW COLUMNS FROM $row[0]");
    while ($row1 = mysql_fetch_assoc($result1)) {
        if (preg_match('~char|text|enum|set~', $row1["Type"])) {
            mysql_convert("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] CHARACTER SET binary");
            mysql_convert("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] COLLATE $collation" . ($row1["Null"] ? "" : " NOT NULL") . ($row1["Default"] && $row1["Default"] != "NULL" ? " DEFAULT '$row1[Default]'" : ""));
        }
    }
}
mysql_free_result($result);
?>
Kajman_
Profil *
Tak si tam připojení přidejte...
<?php
header('Content-type: text/plain');
$collation = 'utf8_czech_ci';//nastavte si dle potreby - vetsinou na kodovani stranek, ze ktere se tam dostala spatne diakritika
$jmenodb='jmenoDatabaze';
//pripojeni
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

// vyber databaze
$db_selected = mysql_select_db($jmenodb, $link);
if (!$db_selected) {
    die ('Can\'t use '.$jmenodb.' : ' . mysql_error());
}

function mysql_convert($query) {
    echo "$query;\n";
    //$return = mysql_query($query);
    //echo mysql_error();
    //return $return;
}

mysql_convert("ALTER DATABASE $jmenodb COLLATE $collation");
$result = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_row($result)) {
    mysql_convert("ALTER TABLE $row[0] COLLATE $collation");
    $result1 = mysql_query("SHOW COLUMNS FROM $row[0]");
    while ($row1 = mysql_fetch_assoc($result1)) {
        if (preg_match('~char|text|enum|set~', $row1["Type"])) {
            mysql_convert("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] CHARACTER SET binary");
            mysql_convert("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] COLLATE $collation" . ($row1["Null"] ? "" : " NOT NULL") . ($row1["Default"] && $row1["Default"] != "NULL" ? " DEFAULT '$row1[Default]'" : ""));
        }
    }
}
mysql_free_result($result);
?>
Rash
Profil *
Tak jsem to spustil a nepozoruji výsledek... V DB je u sloupců pořád latin1_swedish_ci. :/
Kajman_
Profil *
Nic nebylo na výstupu stránky? Mělo by to jen zobrazit návrh příkazů, které jsou potřeba.
Rash
Profil *
Tak to se omlouvám, blbě jsem to pochopil. Myslel jsem, že to rovnou tu databázi opraví.

Příkazy jsem spustil a vypsalo to tohle:
ALTER TABLE searchcore_text MODIFY keywordtext mediumtext CHARACTER SET BINARY ;

#1283 - Column 'keywordtext' cannot be part of FULLTEXT index 

Další dotazy se asi neprovedly, že?
Co s tím?
Kajman_
Profil *
Je to napsáto v tom původním článku, že tohle ten skript neřeší a buď si tedy fulltextové indexy zrušíte sám ručně a pak zase vytvoříte nebo si upravíte skript, aby to dělal sám.
Rash
Profil *
Kajman:
Je to napsáto v tom původním článku, že tohle ten skript neřeší a buď si tedy fulltextové indexy zrušíte sám ručně a pak zase vytvoříte nebo si upravíte skript, aby to dělal sám.

Jo, tak tomuhle už vůbec nerozumím. Mohl byste mi ukázat, jak by to mělo vypadat, prosím?
Kajman_
Profil *
Ukázku máte, víte co se v ní chybí. Buď si to naklikejte ručně nebo zkuste někoho sehnat v práce a zakázky, kdo Vám to doprogramuje, když to nechcete dělat sám.
Rash
Profil *
OK, díky za pomoc.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: