ugrás a tartalomhoz

mySQL 3.23.26-rol 4.1-re áttérésnél charset es collation problémák, valaki latott mar ilyet?

aboy · 2004. Nov. 16. (K), 11.54
Udv!

mysql 3.23.56-rol kellene atternunk 4.1.7-re. uj szerver my.cnf-ben charset latin2 es collation latin2.hungarian.ci megadva, szerver szinten ezekkel a kapcsolokkal inditva. adatbazisok megfeleloen letrejonnek, importalas sikeres, ő, ű is jo.

viszont: importalas utan ha kapcsolodok a klienssel es olyan select-eknel ahol mondjuk a where feltetelben string tipusu mezot vizsgalok egy ertekre = operatorral (pl name='main') akkor a kovetkezo hibat adja:

ERROR 1267 (HY000): Illegal mix of collations (latin2_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

eloszor azt hittem a szervernek meg valahol default-on van a collation-ja (swedish) de aztan kiderult, hogy ha --default-character-set=latin2 -vel inditom a mysql klienst parancssorbol, akkor lefut ugyanez a select. Tehat a latin1_swedish_ci a kliensre vonatkozik.

Namost ez rendben volna, mert a my.cnf-ben a kliensre be tudom allitani fixen hogy igy kapcsolodjon. De mi a helyzet a php-vel? Azzal ugyanis nem megy sehogy sem. Probaltam a default_charset-et 8859-2-re allitani de nem jo, es a mysql szerver my.cnf-ben is beallitottam a klienstol erkezo karakterkeszlet konverziot (http://dev.mysql.com/doc/mysql/en/Charset-connection.html) meg a tobbit is:
[mysqld]
default_character_set = latin2
[mysql]
character_set_client = latin2
character_set_connection = latin2
collation_connection = latin2_hungarian_ci

de nem mukodik (a php script futtatasakor ugyanugy Illegal mix of...)

egyszoval: hogy tudnam ravenni a php-t hogy ne a default karakterkeszlettel konnektaljon?

koszonom
aboy
 
1

megoldodott...

aboy · 2004. Nov. 16. (K), 14.18
kozben megoldodott, a php-t ugy forditottam hogy egy latin2 charsettel es collationnal forditott mysql-t adtam meg a configure-nak
2

A megoldás elég egyszerű

Poetro · 2004. Nov. 17. (Sze), 13.29
A megoldás elég egyszerű és kézenfekvő (ahogy a MySQL manuálja is állítja). Minden egyes kapcsolódáskor be kell állítani a neked megfelelő karakterkészletet:
@mysql_query('SET CHARACTER SET latin2');
Mondjuk a MySQLnek alapból tudnia kellene ezt, azaz hogy dinamikusan lehessen állítani a karakterkészletet (sőt, hogy egyáltalán állítani lehessen), de sajnos csak most jutott el idáig (kössz CoL a segítséget SQL levlistán)

--------
Poetro
3

általánosítani

aries · 2004. Nov. 25. (Cs), 16.34
Vmi általános megoldás nincs erre? Hogy ne kelljen belenyúlni a scriptekbe.