Problem s Č pri asp scriptoch s SQL dotazom na IIS
Na serveri w2k kde je naistalovany SQL server a bezi tam IIS, mam zaujimavy problem s ktorym si us niekolko dni neviem poradit...
Pri dotaze napr.
select * from databaza where meno like 'Č%';
mi dotaz vrati záznamy zacinajúce na meno E,É.Myslel som, ze problem bude s nastavenym kodovanim alebo charset, ale situacia je zamotanejsia.
Fakty:
1.Ak taky isty dotaz ide na firebird server /server bezi ale inde/na obdobnu tabulku ako vyssie, tak data su vratene spravne!
2.Ak je ten isty script umiestneny na w2k cz/XP/pracovna stanica/tak to funguje spravne - to znamena su vratene vysledky,kde meno zacina na Č
3.Vyskusal som pripojenia na ADO cez DSN,SQLOLEDB,MSDASQL s rovnakymi vysledkami
4.na serveri w2k je SP4 a na SQL 2000 SP1
5.Ak je pripojenie na SQL server zvonka priamo bez asp - normalny exe, tak to funguje spravne
6.V enterprice manageri to ide tiez spravne
7.Ale moj exe program spusteny na serveri tiez nefunguje spravne - vrati mená začínajúce na E a É.
8.Iné háčky,dĺžne Ž,Š fungujú správne iné som neskúšal
9.Skusil som UTF-8,ISO-8859-2 kodovanie ale toto na vratene data vplyv nema.
Nemal by niekto ideu...Dakujem
Nejsou na tom serveru anglická Windows?
Nejde jen o problem s fontem, kterym se zobrazuje vysledek? Systemove fonty totiz obsahuji pouze rez, ktery je nastaven v Control panels / Regional settings / posledni zalozka.
Zkus si v nastroji, ze ktereho spoustis dotaz nastavit jiny font - Arial, Courier New apod.
Ano je to anglicky server.Lokal settings mam nastaveny na cz.
Tu nejde o proste zobrazenie - to by som chapal, ak by bolo daco sifrovane namiesto CHRANČOK sa zobrazi CHRANÈOK kde tento znak je kod
asc(200) pri western je to È a pri
asc(200) pri central je to Č
A áno zmena fontu na arial mojej aplikacii pomohla do tej miery, ze vratene hodnoty uz zobrazuje spravne ale nic to nemeni na skutocnosti ze pri dotaze vrati uplne ine data EHNOVA,ÉHN,EVIČKINOVA namiesto ČÁKY,ČIMBAL atd...
Ako keby asp stranka zle posielala SQL serveru dotaz...
Pri mojich zufalych pokusoch som objavil, ze session.codepage=1250 to uplne rozhodi a aby to slo aspon ako tak dobre musi tam byt session.codepage=1252, nerozumiem tomu ...
Este dalsie zistenie, ak som urobil dotaz takto
select * from databaza where ascii(substring(meno,1,1))=200
tak sa mi vratili data spravne, to znamena mena zacinajuce na Č
=>nejako sa musi spotvorit odosielana poziadavka SQL serveru z ASP /Č sa zameni na É/ ale ake je riesenie????
Inak kodovanie columns je SLOVAK_AI_CI...
Musi to byt niekde v v tom anglickom IIS - ale na ten pokial viem nie je ani SP...
Dalsie zistenia
Na dotaz
select 'ÁÉÚÍÓÝĹŔÁĚÔČŇŠĽŘŤŽĎáéúíóýĺŕäěôčňšľřťžď' as Pokus;
Dostavam odpoved
ÁÉÚÍÓÝAAÁIÔEOŠ1O?ŽIáéúíóýaaäiôeoš3o?ži
Tak to je to nazornejsie
ÁÉÚÍÓÝĹŔÁĚÔČŇŠĽŘŤŽĎáéúíóýĺŕäěôčňšľřťžď
ÁÉÚÍÓÝAAÁIÔEOŠ1O?ŽIáéúíóýaaäiôeoš3o?ži
Čiže tých poškodených znakov je podstatne viac - nielen č.
Takto to "pretransformuje asp stranka ked to odosiela SQL serveru, ale preco?
V to pripade je problem mezi kodovanimi CP-1250 a ISO-8859-2
Zontroluj si nastaveni IIS
Predsa len to bolo v tom regional settings - aby si spravne posielal sam sebe "nase" znaky /IIS<->SQL/ tak musi byt nastavene na serveri odskrtnut central europe ako default a je to/nestaci local na slovak/!!!
Pomylilo ma najma to, ze SQL inak zvonku pracuje spravne a podobne IIS na SQL serveri smerom von na ine SQL servre resp.mdb tiez, ale na svoj MSSQL uz nie!
Velka vdaka p.Fiala...