

PHP a MySQL kódování
MySQL DB: staré tabulky se švédským kódováním textů, nové s utf8_czech_ci
Web: Windows-1250
DB -> web jsem vymyslela jak korektně zobrazovat české znaky z nových i ze starých tabulek.
Web > DB prasí češtinu z utf8_czech_ci.
Spojení s DB žádné kódování nastavované nemá.
Kódování webu nemám možnost změnit - je v souboru společném pro všechny stránky webu, k němuž nemám přístup.
Nastavit kódování v DB na cp1250 jsem taky zkoušela úplně jako první, ale pak mi to prasí znaky, které tam zapisuju přes phpMyAdmina na Linuxu.
Nepomáhá ani:
$vysledek = mysql_query("SET NAMES utf8");
$vysledek = mysql_query("SET CHARACTER SET utf8");
$vysledek = mysql_query("ALTER TABLE m_kariera DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci");
$ulice = iconv("Windows-1250", "UTF-8", $ulice);
Nějaký nápad co s tím by nebyl?
Keď máš web v kódovaní Windows-1250, tak od MySQL chceš, aby sa s tebou rozprával v rovnakom kódovaní. Príkaz SET NAMES pre nastavenie kódovania, v ktorom komunikuješ s MySQL, by teda nemal nastavovať UTF-8, ale Windows-1250, takže by mal vyzerať takto:
Funkciu iconv by si už potom nemala potrebovať.
Ne, to už jsme zkoušeli včera a zkoušela jsem to i teď. cp1250 to zprasí mnohem víc než všecko ostatní.
Web je Windows-1250, DB je utf-8 (česká) a potřebuju to nějak překonvertit před zápisem buď PHPkem nebo k tomu donutit DB.
nedavno som riesil prevod mysql databazy z kodovania latin1 do utf8_bin
samozrejme ked vo vytvorenej databaze zmenim kodovanie tak to pose*ie vsetky texty. Urobil som to teda inak.
Dumpol som databazu - co vlastne vytvori TXT subor. Ten som editoval, u kazdej tabulky som nastavil spravnu collation a vsetko co k tomu patri. Po uprave som tuto databazu znovu obnovil. Tym padom som dosiahol to, ze som zmenil aj collation a aj texty ostali nezmenene.
Já ani nechci měnit texty v DB. V DB je hodně tabulek, pracuje se s nimi na hodně místech... Nechci riskovat, že když změním kódování nějakých starých textů, tak to pak přestane fungovat a ručně se mi s tím nechce přepisovat, za tu práci to nestojí.
Jediné co chci, je převést text při ukládání z Wndows-1250 (web) do české utf-8 (DB), lhostejno, zda nějakým phpkovým příkazem nebo nějakým nastavením v dB. Když to jde bez problémů opačně z DB na web, tak to přece musí jít takhle taky.
o ziadnej zmene textov v DB som nepisal. Pisal som, ze je mozne urobit zalohu databazy (dump). Zaloha sa vlastne vytvori v style textoveho suboru, kde je kodovanie spravne. Budes tam mat teda nieco taketo:
takze tento subor upravis tak, ze pri kazdej tabulke zmenis collate na tu spravnu. Taktiez mozes zmenit v global_settings nastavenia. Ak ale chces aby tieto globalne nastavenia ostali nezmenene potrebujes ich vlozit do my.ini resp. do my.cnf(v linuxe).
Ked mas cely dump upraveny tak ho restornes ako novu DB. Takze sa ti vytvori nova DB so spravnou collation a nove tabulky so spravnou collation pricom sa ti do tychto novych tabuliek nasackuju data, ktore si tam mala aj predtym.
Hezky si to představuješ, ale na to, že máš část DB v nějakém švédském kódování a část v UTF8-czech a web používá kódování win1250 a nechceš konvertovat DB ani změnit kódování webu, tak marná jiná snaha. Ono je někdy kumšt zprovoznit i kódování UTF8, proto to mnozí řeší win1250.
Jenom můžu ujistit, že žádný php příkaz nebude schopen docílit správného zobrazování diakritiky bez ujednocení kódování jak webu, tak DB, takže pokud chceš mít diakritiku ok a to jak starých, tak nových textů budeš muset provést konverzi DB do win1250 a případně provést ruční korekci, jinak to nepůjde.
HEURÉKA!!! Funguje mi to, i když si myslíš, že je marná snaha. Stačilo napsat správné 2 řádky a dát je na správné místo (před insert do DB):
Celý článeček na toto téma (v češtině) je na: interval.cz.
Samozřejmě uznávám, že nejjednodušší je mít všechno ve stejném kódování a u nově dělané aplikace bych to tak určitě udělala.
V tom článku opisuje predposledný odstavec presne tvoj prípad - stránka vo Windows-1250 a databáza v UTF-8. Vyriešené to tam je normálne (SET NAMES 'cp1250').
To nastavenie character_set_connection na utf8 ti môže fungovať, ak robíš súčasne navyše tú konverziu pomocou iconv. Keby si ale použila hneď na začiatku SET NAMES 'cp1250', tak by si nepotrebovala zbytočne používať iconv. Ale načo robiť veci jednoducho...
Právě že ne. Žádné iconv nepotřebuju!!! Fakt. Se SET NAMES 'cp1250' (bez character_set_connection) to nefungovalo, to jsme zkoušeli hned na začátku. Musí tam být jak SET NAMES, tak character_set_connection. Jestli mi to nevěříš, můžeš si to zkusit sám, odhaduju, že Ti to zabere cca 15 minut.
Práveže som to skúšal.