Export

Chcem sa spytat, preco vzdy ked exportujem databazu cez phpMyAdmina a potom ju nainportujem inde, tak pridem o mekcene - namiesto nej mam bludy. Kde je chyba? Viete mi niekto poradit?
Doplnam vzhladom na to, ze nieco take sa tu preberalo. Co to sposobuje - phpMyAdmin alebo co?
V principu je to jednoduché. Je to celé o kódování znakové sady. Na začátku si musíš jednu sadu zvolit (v češtine ISO 8859-2, Windows-1250 nebo UTF-8). V tomto kódování musíš mít texty a zároveň toto kódování nastaveno v databázi na úrovni tabulek a sloupců. Pak není problém.

Řešilo se to tu víckrát, pohledej.
Napisal som otazku bez logiky moja chyba. Nepouzivam tento web. Som komercny programator, ktory dostal za ulohu - preniest tento web na komerciu. Povodny autor kodovaniu jasne nerozumel. Co mi robi velke problemy. Citam tie texty a je tu vela pokecov o vsetkom. Ja chcem len suma sumarov - texty databazy aj s tym kodovanim co tam je - ja si to prekodujem, ale cez php admina mi to nejde - pretoze ten pri exportovani dodrbe znaky. Php skript a prihlasovacie udaje ktore na phpmyadminovy idu nejdu cez php - vraj to predtym islo - ale teraz to rozhodne nejde. Neviem menili sa tu nazvy serverov - ja standradne vsade kde pracujem - mam conect na db na localhost ale tu to asi tak nejde. Cize neviem ani pouzit skript, ktory sa mi nechce ani pisat. Potrebuejem jednoduche a rychle riesenie viete mi poradit? :)
"Potrebuejem jednoduche a rychle riesenie" Není nic snažšího, že?

Těžko můžeš dostat konkrétní odpověď, když nikdo neví, jak je nastavený ten druhý server. Nicméně prvotně je třeba udělat správný export.

1. Export NENÍ nutné dělat přes PhpMyAdmina (PMA). Můžeš si napsat vlastní exportní skript.

2. Pokud chceš použít PMA, pokračuj na bodu 2. S vlastním exportním skriptem a vyexportovanou db pokračuj na bodu 5.

3. Rozchoď dobře češtinu/slovenštinu v PMA ve stávající databázi na WZ. Podle kódování textů nastav v db správné kódování každé tabulce a sloupci, kde jsou texty. Toto nastavení zjistíš ve sloupci "Porovnání". Jde to udělat i hromadně pro celou db: http://www.webzdarma.cz/tmp/mysql-upgrade-src.php

3. Zkontroluj, že se to povedlo. PMA musí zobrazovat všechny znaky s diakritikou správně. Jinak logicky nemůžeš PMA použít na export a budeš si muset napsat vlastní exportní PHP skript (viz bod 1).

4. Export. To je celkem jednoduché. Je dobré se podívat, co se ve vyexportovaném souboru píše u collate a charset. Mělo by to odpovídat. Když se na ty vyexportované texty podíváš ve správné znakové sadě, diakritika musí 100% fungovat.

5. A teď záleží na tom, jak je nastaven ten druhý server. Takže buď přímý import, nebo předtím konverze znakové sady a úprava collate a charsetu.

<note>Ten název "komerční programátor" se mi líbí :-)</note>
O tom ako je nastaveny druhy server, to nie je podstane. Uz som to spravil. Ale bola to sranda :). A tak par rad pre userov - ked vytvarate php skripty - vytvorte si sumarne funkcie pre prihlasovanie na databazy. Usetrite sebe aj inym problemy - typu zmenil som heslo a teraz ako debil musim hladat vsade vo skripte nastavenie prihlasenia. Ten skript v 3 je dobry :) - vrele odporucam. Dakej rady typu ukladanie hesla pomocou password funkcie dobre - pre tych co to robia mozu sa tesit na prichod mysql5 - to bude sranda. Odporucanie - ak kodovat hesla tak jednoznacne cez zname hashove funkcie napr. md5,sha1 :). Password funkcia mysql je tak obsirna - ze sa neda zabezpecit je spravna funkcia na dobu neurcitu, a bude menit a to nie len teraz v mysql5 ale aj neskor. A pri prechode na mysql5, budete hladat a upravovat riadky s Password() na Old_Password() :). Neviem ci to na poslednom riadku bola narazka :) Viem ze otazka bola blba - ale ked sa mi nechcelo robit to co som tak ci tak robit musel citat to co som dostal - a nie vzdy to je pekne citanie to mi verte. Niekedy mi pripada jednoduchsi ako phpMyAdmin mysql> v prikazovom riadku :) Nemusel som pisat ten skript.

P.S. vsimol som si ze uzivatelia tu smutia, ked im niekto povie aby zmenili kodovanie webu. Je to jednoduche iconv program im velmi pomoze. Nerobi nic len preraba subory z jedneho kodovania do druheho :) Tod vse.
Zapomněls napsat, jak jsi přesně vyřešil: "ale cez php admina mi to nejde - pretoze ten pri exportovani dodrbe znaky"
Nasledujici skript uloz do nejakeho .php souboru, nahraj na server, spust skript na serveru, uloz obsah do .sql souboru (Soubor->Ulozit jako...->Typ souboru: textovy soubor) a mohlo by to byt ok (me to tak funguje). Strukturu databaze(tabulek) si vygeneruj z phpMyAdmina.
Pozn.: vygeneruje dump cele databaze (jen data).



// Kodovani souboru: Windows 1250 (CP1250)
<?php

// ------------ N A S T A V E N I ----------------------------------------------

$db_server = "mysql.webzdarma.cz"; // pro WebZdarma nemenit
$login = "sem napis jmeno databaze na WebZdarma"; // <==== UPRAV TOTO
$jmeno_databaze = $login;
$heslo_databaze = "sem napis heslo k databazi"; // <==== UPRAV TOTO

// -----------------------------------------------------------------------------

@mysql_connect($db_server, $login, $heslo_databaze)
or die("Nepodarilo se pripojit k databazi. Zkontroluj prihlasovaci udaje.");
@mysql_select_db($jmeno_databaze) or die("Nepodarilo se otevrit databazi '$jmeno_databaze'.");
mysql_query("SET CHARACTER SET latin2");
mysql_query("SET NAMES latin2");
$tabulky = mysql_query("SHOW TABLES");
while($table = mysql_fetch_row($tabulky)) {
$data = mysql_query("SELECT * FROM $table[0]");
while($zaznam = mysql_fetch_row($data)) {
$pocet_dat = count($zaznam)-1;
$dotaz = "INSERT INTO $table[0] VALUES (";
for ($i=0;$i<$pocet_dat;$i++) $dotaz .= "'".mysql_escape_string($zaznam[$i])."', ";
$dotaz .= "'".mysql_escape_string($zaznam[$pocet_dat])."');\r\n";
echo $dotaz;
}
echo "\r\n";
}
?>
Tak to už je opravdu v ... Použil jsem tento skript a úspěšně exportoval databázi. Potíž je v tom, že na webu, běžícím stále na té původní databázi diakritika š a ž přestala funguvat? Jak to dám zpátky? Kde je chyba?
http://www.webzdarma.cz/forum/read.php?f=5&i=9162&t=9162
děkuji za odpověď, ale tyhle fóra jsem již pročetl ale odpověď jsem nenašel. Užž jsem to nějak spytlikoval, takže snad to bude chodil korektně :)
mysql_query("SET NAMES 'cp1250' COLLATE 'cp1250_general_ci'");// or die("Error: Charset!".mysql_error());
"dev.mysql.com/doc/refman/5.0/en/charset-charsets.html" SQL kodovani
"dev.mysql.com/doc/refman/5.0/en/charset-ce-sets.html" SQL kodovani2