[MySQL] Chybné v kódovanie po zmene hostingu
Ahojte, mám taký zaujímavý problém (aspoň pre mňa), možno to by to malo byť v programoch - neviem. Potrebujem presťahovať dve webstránky na vlastný server (zatial sú u Forpsi) a mám problém s databázou, resp. kódovaním. Potom čo naimportujem databázu, nezobrazujú sa mi správne znaky ő a ű (jedná sa o maďarský web) a na ich mieste sú otázníky. Všetky ostatné špeciálne znaky (á, é, í, ó, ö, ú, ü) sa zobrazujú správne.
Keď spravím export, tak všetky dáta sú v poriadku, keď ich naimportujem u seba a následne vyexportujem, sú stále v poriadku, v texte vidím zachované všetky špeciálne znaky. Z tohoto my vyšlo, že problém je niekde u mňa v nastaveniach. Dáta v tabuľkách majú Collation utf8_czech_ci alebo latin2_general_ci (sám neviem že prečo, asi sa medzičasom menilo nejaké default nastavenie) a samotná databáza utf8_unicode_ci. Keď to takto naimportujem, tak znaky ő, ű sa nezobrazjő správne, tak isto keď nastavím pred improtom všade utf8_unicode_ci, alebo keď zmažem nastavenia collation a nechám to naimportovať default nastavením (utf8).
Zatial sa to podarilo obísť len úpravou samotného webu pridaním
Kód:
mysql_query("SET CHARACTER SET latin2")
do PHP kódu stránok, ale nezdá sa mi to ako moc elegantné riešenie, hlavne z dôvodu že sa jedná o phpBB fórum a PHP-Fusion CMS, kde je kvôli updateom úprava kódu nepraktická. Nie som žiaden PHP-MySQL guru, takže by sa hodila nejaká rada, že ako to mám nastaviť, aby to fungovalo správne. Predpokladám že mám niečo zle nastavené v MySQL, resp. niečo by som mal robiť inak pri importe. Prosím skúste helfnúť lame. :)
Pre úplnosť ešte dodám, že zobrazujú sa zle len tie znaky, ktoré sa naimportujú, keď napíšem nejaký nový článok, príspevok, hocičo, tak tam sa už ő a ű už zobrazuje správne. MySQL u Forpsi je 4.1.21 u mňa 5.0.18, pri imorte som nastavil SQL compatibility mode na MYSQL40 (neviem či je potrebné).
Re: [MySQL] Chybné v kódovanie po zmene hostingu
No moc jsem nepochopil, co je kde nastavene.
Ale pokud to dokazes exportovat vporadku, tak to proste cely ten importovaci skript preved na ISO 8859-2 kodovani(napr. pomoci PSPadu to jde docela elegantne).
Pak si u sebe nastav na cele DB(i na jednotlivych tabulkach radsi, resp se o tom presvedc) defaultni collation latin2_hungarian_ci, cimz se nastavi i kodovani a naimportuj to.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
jedik
... tak to proste cely ten importovaci skript preved na ISO 8859-2 kodovani...
Mam pocit, ze to mu zo vsetkych ž spravi ľ a z č é ...
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
PiT
Mam pocit, ze to mu zo vsetkych ž spravi ľ a z č é ...
Proc by melo?
Ja na to v PSPadu pouzivam tak trochu berlicku, ale je to docela rychle, kdyz jde o jeden soubor:
- otevru soubor v PSPD v kodovani, ve kterem je ulozen
- Ctrl+A, Ctrl+C
- zmena kodovani(Format > ...) - ted se to samo cele zmrsi, ale nezoufejme
- Ctrl+A, Ctrl+V, Ctrl+S ;)
Mnohokrat uspesne aplikovano.
Ono ostatne jestli to e1 dokaze vyexportovat uz primo v ISO 8859-2, tak se zadne konverze konat ani nemusi. Pisu to jen jako alternativni krok.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
jedik, týmto potom budem mať všetko v latin2, nie? Toto ja práveže nechcem, keď už dávam web na nový server, tak by som bol rád keby všetko bolo UTF8.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
e1,
aha, v tom pripade si ten skript prekonvertuj do UTF8, ale pokud chces mit stranky v ISO 8859-2(latin2) tak ten zasah do kodu je treba.
Viz MySQL prikazy - dokumentace (a obecne) - jsou tam super i priklady
Kód:
mysql_query("SET NAMES xxxx");
mysql_query('SET character_set_results=xxxx');
mysql_query('SET character_set_connection=xxxx');
mysql_query('SET character_set_client=xxxx');
Ale ber vpodtaz, ze v MySQL muzes natavit charset/collation server, databazi, tabulce, sloupecku naprosto zvlast, takze si spis rozmysli jak chces, aby to cele pak vypadalo(resp. neni problem mit celou db v UTF8 a nektere tabulky v ISO 8859-2).
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Chcem mať úplne všetko UTF8, collation utf8_unicode_ci. Idem študovať. :)
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Problem je v tom, ako to exportujes/importujes. Ten textovy subor (SQL skript) je v nejakom kodovani - a v nom sa to do databazy zapise. Ked mas databazu v UTF-8, tak ten subor musi byt tiez v UTF-8 (za predpokladu, ze nie su nastavene specialne tie charsety ale uplne vsetko je v UTF-8, ak pouzivas phpMyAdmin, tak aj ten).
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Všetko som robil tak ako píšeš ale neide to, stále sa mi zle zobrazujú tie znaky. Vyexportoval som DB, zmenil v nej charset a na utf8 a collation na utf8_unicode_ci, a celý texťák som uložil ako súbor s kódovaním UTF8 pre UNIX. Tento som naimportoval a výsledok je tu: test.zene.sk - nefunguje to. :( Stránka naďalej komunikuje s DB v latin2 a už fakt nemám šajnu źe kde a čo mám inak nastaviť.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
e1
Všetko som robil tak ako píšeš ale neide to, stále sa mi zle zobrazujú tie znaky. Vyexportoval som DB, zmenil v nej charset a na utf8 a collation na utf8_unicode_ci, a celý texťák som uložil ako súbor s kódovaním UTF8 pre UNIX. Tento som naimportoval a výsledok je tu:
test.zene.sk - nefunguje to. :( Stránka naďalej komunikuje s DB v latin2 a už fakt nemám šajnu źe kde a čo mám inak nastaviť.
A jak mas teda ty pripojovaci retezce v PHP?
V tvoji DB mas vsude UTF8 a kdyz to prohlidnes treb zkrze phhMyAdmina(a nastavis v nem UTF8) tak jsou ty texty dobre?
Re: [MySQL] Chybné v kódovanie po zmene hostingu
jedik, myslíš tento reťazec?
Kód:
function dbconnect($db_host, $db_user, $db_pass, $db_name) {
$db_connect = @mysql_connect($db_host, $db_user, $db_pass);
$db_select = @mysql_select_db($db_name);
if (!$db_connect) {
die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to establish connection to MySQL</b><br>".mysql_errno()." : ".mysql_error()."</div>");
} elseif (!$db_select) {
die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to select MySQL database</b><br>".mysql_errno()." : ".mysql_error()."</div>");
}
}
Inak v DB mám všade UTF8 a v pMA sa to pri UTF8 zobrazuje správne. Napadlo ma že by som mohol uložiť všetky *.php súbory v UTF8 kódovaní, možno by to pomohlo, aj keď mi to nedáva zmysel, lebo všetky cez CMS uložené nové dáta sa zobrazujú správne. Poznáte nejaký soft, ktorý by dokázal hromadne zmeniť kódovanie súborov?
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Cize v phpMyAdminovi sa dobre zobrazuju aj stare aj nove data a na webe nie?
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
e1
Poznáte nejaký soft, ktorý by dokázal hromadne zmeniť kódovanie súborov?
No pokud mas nejake staticky texty v tech PHP, tak urcite prekodovat.
Na hromadne prekodovani treba iconv(popr. iconv pro okna)
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
Rainbow
Cize v phpMyAdminovi sa dobre zobrazuju aj stare aj nove data a na webe nie?
Doteraz som neskúšal zobraziť nové dáta cez pMA a teraz tam vidím pekný humus. Napísal som do shoutbox reťazec áíóöőúüű a cez pMA pri UTF8 vidím áéÃóüőúüű. Staré dáta sú v poriadku, Z tohoto mi vychádza že dáta sú uložné v UTF8 tabuľke iným kódovaním a tiež tým iným sú čítané, vďaka čomu sú znovu čitatelné. Teraz by som už len rád vedel, źe o aké kódovanie sa jedná a kde/ako ho môžem zmeniť.
Inak pozeral som manuál toho softu na konvertovanie súborov, ale nie som z toho múdrejší. Tiež to nie je pre mňa ideálne riešenie, lebo po každom update CMS-ka budem musieť všetko konvertovať. Teraz som skúšal manuálne prekonvertovať niektoré dôležitejšie súbory a jazykové súbory z CMS zmeniť na UNIX/UTF8 a problém s kódovaním naďalej pretrváva, resp. teraz sa zobrazujú zle všetku neanglické znaky, nie len ő a ű.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
A klientovi posielas v hlavicke informaciu, ze encoding je UTF-8? Niekde v nastaveni PHP je o tom tiez nieco, to je najlepsie vypnut a pouzivat <meta>
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Aktuálne som to vyriešil tak, že som pridal jeden riadok, ktorý definuje, že akým kódovaním sa klient pripája.
Kód:
function dbconnect($db_host, $db_user, $db_pass, $db_name) {
$db_connect = @mysql_connect($db_host, $db_user, $db_pass);
$db_select = @mysql_select_db($db_name);
if (!$db_connect) {
die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to establish connection to MySQL</b><br>".mysql_errno()." : ".mysql_error()."</div>");
} elseif (!$db_select) {
die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to select MySQL database</b><br>".mysql_errno()." : ".mysql_error()."</div>");
}
mysql_query("SET CHARACTER SET utf8");
}
Samotná zmena kódovania v meta a zmena kódovania language súborov na UNIX/UTF8 nepomohlo. Predpokladám že si myslel na toto meta nastavenie:
Kód:
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
Teraz už stránka ide v poriadku, ale bol by som rád keby som nemusel použiť ten riadok s nastavením charsetu pri spoejení, lebo po každej aktualizácií ho budem musieť doplňať manuálne a je to súbor ktorý sa najčastejšie mení. :???: Hľadal som nejaké globálne nastavenie pre php.ini, my.conf alebo pre samotnú databázu ktoré by definovalo default kódovanie nešpecifikovaného spojenia, ale neuspel som. Keď nezapíšem ten riadok s nastavením charsetu, tak kódovanie je stále latin1 (keď som dobre vydedukoval z toho, že pred zmenou kódovania stránky to fungovalo správne iba s latin2 charsetom).
Re: [MySQL] Chybné v kódovanie po zmene hostingu
v My.ini/My.cnf lze nastavit default pro konexi => netreba to nastavovat pomoci query
"SET CHARACTER SET utf8".
pokud moc nekecam je to v [mysqld]
character-set-server = utf8 #default pro server
default-character-set = utf8 #default pro konexi
samo ze spravne si ma charset rict aplikace, je to proto, ze data v DB muzou byt v jinem kodovani, nez jake chce pouzivat aplikace a mysql to pak prekonvertuje do toho, oc si aplikace rekne.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Vďaka, chýbal mi v my.cnf ten riadok: default-character-set = utf8.
Teraz to už vyzerá byť OK. Ešte na dvoch miestach na stránke mi to robí nejakú neplechu, ale to už sú nejaké rozšírenia a predpokladám že sú zle napísané. Ďakujem každému za pomoc.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Mám podobný problém. Databáze je MySQL, v ní mám všechno nastavené na utf-8. Nastavoval jsem to v phpMyAdmin kde to jen šlo, databáze, tabulka, pole, prostě všude kde jsem to narazil. Naimportoval jsem tabulku z textového souboru, který byl v utf-8 (upravován a uložen v pspadu).
Nahrál jsem php soubor, který je také kodován v utf-8, editor pochopitelně pspad. V něm mám klasicky <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.
Když mi však dojde stránky ze serveru, tak je diakritika v .....>:{
Už fakt nevím co s tím. Máte někdo nějaký tip?
Tady jsou některé proměnné a nastavení serveru vycucané z opět phpMyAdmin.
Kód:
character set client utf8
(Globální hodnota) latin1
character set connection utf8
(Globální hodnota) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Globální hodnota) latin1
character set server latin1
Ještě bych dodal, že ve webserveru (Apache) by to být nemělo. Mám tam dvě stránky, jednu utf-8, druhou cp1250 a všechno funguje jak má.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
PHP súbory kde to hapruje sú v akom kódovaní? Skús otvoriť cez PSPad a skontroluj či je všetko uloźené ako UNIX/UTF-8 (pokiaľ sa jedná a Linux server). Info nájdeš v status bare, zmeniť to môźeš cez Format.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Mas nastavenu databazu na latin1, takze to nemoze fungovat.
Re: [MySQL] Chybné v kódovanie po zmene hostingu
Citace:
Původně odeslal
Warran
V něm mám klasicky <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.
Coz je ti nanic, pokud neposila spravnou hlavicku server. Spravne se chovajici prohlizec se chova podle hlavicky a teprve kdyz neni se diva do meta.