
Navštíveno 688x

Mám MySQL databází a v ní se přes HTML/PHP formulář opravují data. V připojení databáze mám nastaveno: mysql_query('set names cp1250');
Do databáze byla na začátku naimportovaná data z CSV ve Win1250. Když z té databáze pomocí HTML/PHP (charset na Win1250) čtu, tak se čeština ukazuje OK. Jakmile ale do databáze přes formulář vložím změnu, tak už se mi diakritika rozhodí. Např.
- naimportováno: Česká
- web ukazuje: Česká
- přes formulář editace na: Česká zbrojovka
- web ukazuje: ?eská zbrojovka
Co s tím? Díky.
odpovím si sám :-), vyřešeno
parada, to asi nekomu hodne pomuze, az bude mit podobny problem...
no nepomůže, ale asi tu nikdo podobný problém neřešil, když se neozval. Samo, jestli to někoho zajímá, klidně to sem napíšu.

11.08.2010, 09:13 |
AR tipnu, měl si špatné kodování te stránky která zpracovávala tu editaci?
ee, problém byl v nastavení SQL serveru. IT človíček nainstaloval Apache a MySQL, přičemž vše zůstalo ve výchozím latin1/latin1_swedish_ci akorát character_set_server byl utf8.
Tak jo, změníme tedy nastavení SQL, ale ouha, i když jsme se přihlásili jako root admin, nebylo možné v System Variables tato nastavení měnit a v congif souborech jsme nikde to současné nastavení latin1/latin1_swedish_ci nenašli.
Takže jsem poslal SQL příkaz ALTER TABLE na konkrétní tabulku s tím, že to změním takhle. Ani to však nešlo, nicméně nám to aspoň ukázalo, v kterém db.opt souboru je nastavení konrétní tabulky. Takže jsme to nastavili přímo v tom db.opt.
No a nefungovalo to pořád. Zjistil jsem, že tímto se změna dotkne jen nově založených tabulek, ale ne již existujících. Takže opět SQL napřímo ALTER TABLE na jednotlivé sloupce tabulky a sláva, už to fungovalo.
Ovšem jen do doby než jsem v jednom sloupci změnil typ proměnné, tím se to zase vrátilo na default a musel jsem na ten sloupec znovu napřímo SQL.
No a dnes se konečně podařilo odhalit, kde se to nastavuje pro celý MySQL. Takže jsem zase o něco chytřejší ;-)

13.08.2010, 07:17 |
Daryl (A) | Upraveno: 2010-08-13 07:27:42
Pokud pouzijes set names u každého spojeni a bude mu odpovídat kódování kazde stránky, tak na nastavení mysql serveru nezáleží.
Správným nastavením serveru se pouze zbavis nutnosti užití onoho "set names"
set names jsem samo nastavený měl a všechny stránky jsou v cp1250, ale prostě to jenom s tím nefungovalo. Proto jsem na to koukal jak z jara, protože jsem se s tím ještě nesetkal.
Já bych taky řekl, že Daryl má pravdu. Když dáš set names XXX a pak tam nahrneš data, tak je úplně fuk, jak je nastavený server... pak při výběru dáš zase set names XXX a dostaneš data ve stejné podobě, jako jsi je vkládal.
no, ale tady to prostě takhle nešlo, nevím proč, našel jsem podobný problém i v několika php diskuzních forech a nikdo to nedokázal vysvětlit. Každopádně aspoň vím do budoucna

14.08.2010, 23:16 |
Daryl (A)
Sestikule: jediny vysvetleni je, ze v jednom z kroku nebyla ta cestina nastavena spravne.
Na serveru se nastavuje jen collation (pro porovnavani) a kodovani pro komunikaci. Ani jedno z toho nema vlyv na to, v jakem formatu vypadnou data nebo tam vlezou.
Na 100% ty data byla vlozena, nebo prectena se spatnym nastavenim kodovani nebo set names v ramci stranky.