mySQL 3.23.26-rol 4.1-re áttérésnél charset es collation problémák, valaki latott mar ilyet?
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
■ 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
megoldodott...
A megoldás elég egyszerű
@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
általánosítani