mysql: ékezetfüggő LIKE
Sziasztok!
Van egy utf-8-as mysql problémám:
Magyar városokat szeretnék egy adatbázisból ajax-szal select option-be szűkíteni a beadott karakterek alapján (amolyan google suggest). Addig már eljutottam, hogy az ö és ő közötti különbséget feloldottam (%F6 vs %u0151 az urlencode részéről), de az adatbázisból az összes o, ó, ö, ő-t visszadja. Minden utf-8-as, keresgettem az interneten az 'accent-sensitive' kifejezésre, és mások is belebotlottak a problémába.
A probléma megoldható, sugarCRM-ben működik, de nekem egyszerűen nem megy. Nem tudom, hogy vagy mégis a karakterkódolásnál szúrtam el valamit, vagy a LIKE az ékezetfüggetlen lenne?
Minden tippet szívesen fogadok, mert reggel óta a hajamat tépem.
Köszi:
b
■ Van egy utf-8-as mysql problémám:
Magyar városokat szeretnék egy adatbázisból ajax-szal select option-be szűkíteni a beadott karakterek alapján (amolyan google suggest). Addig már eljutottam, hogy az ö és ő közötti különbséget feloldottam (%F6 vs %u0151 az urlencode részéről), de az adatbázisból az összes o, ó, ö, ő-t visszadja. Minden utf-8-as, keresgettem az interneten az 'accent-sensitive' kifejezésre, és mások is belebotlottak a problémába.
A probléma megoldható, sugarCRM-ben működik, de nekem egyszerűen nem megy. Nem tudom, hogy vagy mégis a karakterkódolásnál szúrtam el valamit, vagy a LIKE az ékezetfüggetlen lenne?
Minden tippet szívesen fogadok, mert reggel óta a hajamat tépem.
Köszi:
b
REGEXP?
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
BINARY
http://dev.mysql.com/doc/refman/4.1/en/string-comparison-functions.html#id4421933
re: BINARY
SQL-ben nem vagyok nagyon otthon, ezt nem értem, binárisan miért nem lehetne hasonlóságot visszaadni?
The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.
Ezért?
Különben a regexp-pel ugyanaz a helyzet, de azt a segítséget is köszönöm. És beleástam magam a sugarCRM-be, és az sem oldja meg a problémámat (oda vissza url kódolva mennek az adatok), viszont ötletet adott, amivel csúnyán, de megcsináltam (visszaadott halmazt php stristr()-rel szűkítem). Jelenleg jó, de egy korrekt megoldást azért szívesen látnék.
Üdv:
b
ps: asszem küldtem egy pn-t nem volt szándékos, sorry, túl gyorsan, túl rossz helyre kattintottam :)
collation?
re: collation
Ezt is próbáltam, igaz, nem utf8_bin-nel. Így is uaz.
A probléma talán az, hogy url kódoláskor - szerintem - semmilyen kódtáblában nem szerepel a karakter (persze ASCII-ben igen) ráadásul van közte több byte-os.
Egyébként
Mindenesetre köszi neked is a helpet.
Üdv:
b
utf8_bin a lényeg
esetleg próbáld ki a példát, amit írtam mindkét változatban (én megtettem 5.0.32-ben, így például erősen csodálkozom ezen a kijelentéseden: "Ezt is próbáltam, igaz, nem utf8_bin-nel. Így is uaz.")
kipróbáltam
Vicces, de a leginkább elfogadható eredményt az utf8_hungarian_ci adta. A probléma gyökere sztem(!) ott van, ogy az a bizonyos 'a', 'á' vhogy nem akaródzik utf-8-asnak felismerődni. Mivel maga a karakterek url kódolva jönnek, utána preg_replace-szel cserélem az %[alfanum][2] és %u[alfanum][3,4] alakú karaktereket. Ami biztosan(?) jó, mert többször is ellenőriztem és sikerült közös nevezőre (utf8) hozni őket. Aztán vhol a MySQL benyeli.
Persze továbbra is nagyon lehetséges, hogy én szúrom el vhol.
Üdv:
b
ps: De, hogy érthető legyek, pl. ezt szeretném megtalálni az utf-8-as táblámban (_general_ci, _hungarian_ci, _bin, nekem mindegy): gy%u0151rs%F6v%E9nyh%E1z
hol van ilyen?