Re: Čeština PostgreSQL, PHP, RH6.2cz

Josef Zacek Zacek na aq-test.cz
Čtvrtek Červen 7 12:01:50 CEST 2001


> Windowsy a unixy používají kódování win-1250 a iso-8859-2, ty se
> pro češtinu liší ve třech(šesti) písmenech žšť (ŽŠŤ). Může se tedy
> stát, že se nepřekódovává vůbec nic. Vám se potom zdá, že je vše v
> pořádku, dokud se tam neobjeví jeden z těch výše jmenovaných znaků.

Zdá se, že tady bude ta smrdutá potvora. Skutečně se to týká pouze 
těchto písmen. Ale.... 
Odběhl jsem přímo k serveru a podíval se do tabulky rovnou z konzole 
abych se vyhnul rekódování. Jinak používám putty z Win s auto 
rekódováním - taky funguje SELECT na žšť. Zápis U VŠECH písmen s 
diakritikou je O.K., tj. včetně žšť. SELECT přímo z konzole funguje 
také O.K. Zkrátka jsou korektně zapsána do databáze v kódování 
LATIN2. 
Akorát pokud SELECT projde přes to php tak se nějak po.... 
Domnívám se, proto že jde o problém php. Na všech HTML stránkách mám 
napsáno <META http-equiv="Content-Type" content="text/html; 
charset=windows-1250"> a před každým SQL dotazem (vstup z formuláře - 
INSERT, SELECT, UPDATE) napíšu SET CLIENT ENCODING='WIN1250' .
Pokud napíšu v WWW browseru - formulář
SELECT * FROM adresar
tak se v pohodě v WWW browseru diakritika napíše v pořádku - žšť, ale 
pokud napíšu 
SELECT * FROM adresar WHERE jmeno LIKE 'žšť' 
pak je to špatně, pomůže jen 
SELECT * FROM adresar WHERE jmeno LIKE '___' 
pak je to zase O.K. (_ zastupuje ve Win ?, % zastupuje ve Win *)

Uff... jsem zase zmaten. PostgreSQL je zřejmně nevinen. Možná php a 
nakonec, že i Apache přidá svou trošku do mlýna.
Možná jako poslední můžu zkusit přepsat HTML do ISO-8859-2 namísto 
WIN1250 a nastavit vše na ISO-8859-2 a nestarat se o nic. 

Pepa


P.S. Výpis
adresar=# \l
        List of databases
Database  |  Owner   | Encoding
---------------+-------------+-----------
 adresar    | postgres | LATIN2




Další informace o konferenci Redhat-cz