character set collation
Sziasztok.
Egy kis segítséget kérnék.
Hogyan lehet elérni azt, hogy a magyar ékezetes betük közt különbséget tegyen a query?
Adott egy words tábla amelyben magyar szavak találhatóak.
A következő select: select * from words where word = 'cipö'
Megjeleniti az összes 'cipö' és 'cipó' előfordulását.
Igy természetesen működik: select * from words where BINARY word = 'cipö'
Ezt azonban a Hibernate nem eszi meg...
Létezik-e olyan megoldás ami Hibernate-nek is jó?
A következőket kipróbáltam, nem jártam sikerrel BINARY nélkül
set character_set_client = 'latin2';
set character_set_connection = 'latin2';
set character_set_database = 'latin2';
set character_set_filesystem = 'latin2';
set character_set_results = 'latin2';
set character_set_server = 'latin2';
set collation_connection = 'latin2_general_ci'
set collation_database = 'latin2_general_ci'
set collation_server = 'latin2_general_ci'
set character_set_client = 'utf8';
set character_set_connection = 'utf8';
set character_set_database = 'utf8';
set character_set_filesystem = 'utf8';
set character_set_results = 'utf8';
set character_set_server = 'utf8';
set collation_connection = 'utf8_general_ci'
set collation_database = 'utf8_general_ci'
set collation_server = 'utf8_general_ci'
ilyen is volt:
set collation_connection = 'utf8_bin'
set collation_database = 'utf8_bin'
set collation_server = 'utf8_bin'
■ Egy kis segítséget kérnék.
Hogyan lehet elérni azt, hogy a magyar ékezetes betük közt különbséget tegyen a query?
Adott egy words tábla amelyben magyar szavak találhatóak.
A következő select: select * from words where word = 'cipö'
Megjeleniti az összes 'cipö' és 'cipó' előfordulását.
Igy természetesen működik: select * from words where BINARY word = 'cipö'
Ezt azonban a Hibernate nem eszi meg...
Létezik-e olyan megoldás ami Hibernate-nek is jó?
A következőket kipróbáltam, nem jártam sikerrel BINARY nélkül
set character_set_client = 'latin2';
set character_set_connection = 'latin2';
set character_set_database = 'latin2';
set character_set_filesystem = 'latin2';
set character_set_results = 'latin2';
set character_set_server = 'latin2';
set collation_connection = 'latin2_general_ci'
set collation_database = 'latin2_general_ci'
set collation_server = 'latin2_general_ci'
set character_set_client = 'utf8';
set character_set_connection = 'utf8';
set character_set_database = 'utf8';
set character_set_filesystem = 'utf8';
set character_set_results = 'utf8';
set character_set_server = 'utf8';
set collation_connection = 'utf8_general_ci'
set collation_database = 'utf8_general_ci'
set collation_server = 'utf8_general_ci'
ilyen is volt:
set collation_connection = 'utf8_bin'
set collation_database = 'utf8_bin'
set collation_server = 'utf8_bin'
set names
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
character set collation
Köszi. Ha jól emlékszem a set names-el a character_set_connection t ill a collation-t állítottam be. Azonban ott van még a character_set_client és a többi propery, azokat nem kellene beállítani?
Passz, így fejből nem tudom,
binary
A word mezőt állítsd át BINARY-re (ne a query-ben, hanem a tábla struktúrájában), úgy menni fog!
Ha ez MySQL, akkor én ennek a
először: SET NAMES utf8
másodszor: SET CHARACTER SET utf8
A collation-t ajánlott az érintett táblában ekkor utf8_hungarian_ci-re állítani és természetesen minden benne lévő tartalomnak UTF-8 karakterkódolással kell szerepelnie, valamint a forráskódnak (de legalábbis a teljes query-nek) UTF-8 kódolásúnak kell lennie.
Ha nem UTF-8-at akarsz erre használni, a karakterkódolás konzisztenciájára akkor is kínosan kell ügyelni, törekedni kell arra, hogy minden a választott kódolással legyen tárolva és kerüljön fel: kód, lekérések, adatbázis rekordok és persze a táblák collation-jét a létrehozáskor a megfelelőre kell állítani (vagy utólag módosítani a megfelelőre).
A két fenti SQL utasítást a kapcsolatfelvételkor egyszer kell csak kiadni, addig maradnak érvényben, amíg a kapcsolat megszűnik (vagy meg nem változtatjuk direkt).
character set collation
Ok. köszi ezt kb. vágom. Azonban nem tudom hol siklott ki a dolog, viszont rájöttem, látsd lentebb.
Ezt beírtam a my.ini be mint ahogy eddig is:
[mysqld]
init_connect='SET collation_connection = utf8_hungarian_ci'
init_connect='SET NAMES utf8'
character-set-filesystem=utf8
character-set-server=utf8
collation-server=utf8_hungarian_ci
skip-character-set-client-handshake
Utánna még ezt átállítottam
alter database dict character set utf8 collate utf8_hungarian_ci;
és nem lett jó.
Azonban szöget ütött a fejembe az egyik modatod: "minden a választott kódolással legyen tárolva"
ALTER TABLE words CONVERT TO CHARACTER SET utf8 COLLATE utf8_hungarian_ci;
Nem csak be kell állítani a kódolást hanem át is kell konvertálni abba. Így jó lett :-)
köszi még 1x.
nm :) Sejtettem egyébként,
Sejtettem egyébként, hogy csak egyvalami hiányzott a képletből, azért is írtam le minden részletet - szerintem a vak is látta, hogy nem vagy kezdő, nekem legalábbis leesett, hogy a "pontosvessző típusú" hibához hasonló szituban vagy :)
Örülök hogy segíthettem.