Všechny příspěvky (Floyd)
Re: Problém s kódováním v DB |
||
---|---|---|
Nováček
Členem od:
9:02 17.4.2008 Skupina:
Registrovaní uživatelé Příspěvky:
2
|
Tak to mě mrzí, že jsem to psal zbytečně. Začal jsem tady a hledal a hledal a nenašel. Navíc jsem jenom administrátor serveru a o ZenCart vím, jenom to, že existuje. Celý ten obchod je v polštině, a já polsky neumím ani slovo, takže to byla obzvlášť zábavná práce.
Zasláno: 10:10 17.4.2008
|
|
Přenos |
Problém s kódováním v DB |
||
---|---|---|
Nováček
Členem od:
9:02 17.4.2008 Skupina:
Registrovaní uživatelé Příspěvky:
2
|
Pokud náhodou narazíte na to, že se vám přes veškerou snahu nebudou do databáze ukládat znaky které chcete, ale budou se nahrazovat jinými znaky, pak máte velmi pravděpodobně stejný problém, jako jsem měl já. Pokusím se vám ušetřit pár hodin času.
Můj problém vznikl po přesunu na nový server. Kódování v DB na původním serveru bylo nastaveno na Latin2 (ISO-8859-2) a web je rovněž celý v Latin2. Na původním stroji bylo vše v pořádku, na novém vznikl problém, protože v konfiguraci MySQL serveru je nastavena výchozí znaková sada na CP1250 (Windows-1250). Vytvořil jsem novou databázi s výchozím kódováním Latin2, provedl dump v latin2: $ mysqldump obchod -Q --default-character-set=latin2 > obchod.sql Dále jsem provedl na novém serveru import: $ mysql -D obchod --default-character-set=latin2 < obchod.sql Data v MySQL databázi byla korektní (např. v phpMyAdmin bylo všechno O.K.) Na webu bylo také všechno v pořádku až do okamžiku, než jsem se pokusil přidat nové zboží a v názvu se vyskytovaly znaky, které Latin2 zná, ale Windows-1250 ne. Najednou se místo správného znaku objevil otazník. Prohledal jsem tedy všechny skripty a naštěstí je celý ZenCart napsán velmi dobře a přehledně, takže stačilo serveru pro komunikaci s DB vnutit to správné kódování. Moje úprava je v souboru: /includes/classes/db/mysql/query_factory.php Za řádky: if ($this->link) { if (@mysql_select_db($zf_database, $this->link)) { $this->db_connected = true; stačí doplnit: // hack for latin2 mysql_query("SET NAMES `latin2`"); Pokud by to náhodu nefungovalo, tak se ještě dají doplnit i další parametry, které MySQL serveru upraví parametry připojení: mysql_query("SET CHARACTER SET latin2"); mysql_query("SET COLLATION_CONNECTION = `latin2_general_ci`"); Stejným způsobem se dá dosáhnout i toho, že databázi budete mít v UTF8 a web např. ve Windows-1250. Doufám, že jsem touto kapkou informace pomohl těm, kdo budou v budoucnu řešit stejný problém.
Zasláno: 9:21 17.4.2008
|
|
Přenos |