1 (edited by Augustinas 2012-07-27 09:55:01)

Topic: Mysql neranda lietuviškų raidžių

Yra paieškos laukelis, veikiantis su ajax - onKeyUp išmeta rezultatus, tačiau nieko neranda, kai ieškai su ą,č,ę,ė,į,ų ir ū ... (keista, bet š ir ž randa)
Mysql užklausa tokia:

SELECT * FROM fotografijos WHERE Laukelis1 LIKE '%$ąčę%' OR Laukelis2 LIKE '%$ąčę%' OR ...

Duombazė, visi laukeliai ir lentelės nustatytos ant utf8_general_ci
HTML'e <meta> charset nustatytas į utf8
Kiti mysql duomenys:

character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir    C:\xampp\mysql\share\charsets\

Kas dar pasirodė keista, tai kad į SQL užklausų langą įvedus php sugeneruotą užklausą
t.y. (SELECT * FROM fotografijos WHERE Laukelis1 LIKE '%$ąčę%' OR Laukelis2 LIKE '%$ąčę%')
viską randa kaip reikiant...
Taip pat tikrinau failus, lyg ir be BOM...
Taip pat po prisijungimo prie DB vykdoma f-ja SET NAMES...
Saugojimo variklis - InnoDB..
Dirbu ant localhosto.

Padėjusiam ir paaiškinusiam statau bokalą :))

Re: Mysql neranda lietuviškų raidžių

Pirmiausia, tai jeigu kalbi apie AJAX mechanizmą, tai reikia aiškiau patikslinti, ar tavo dauguma paminėtų nustatymų galioja puslapiui, kuriame veikia AJAX, ar jau grynai scriptui, per kuri JS'as pasiima duomenis/siunčia užklausas.

Rašau tai, nes ne visi supranta, kad adresas, per kurį JS vykto AJAX užklausas, taip pat turi atitikti visus reikalavimus dėl UTF8.

Tau rekomenduočiau pamiršti tą puslapį su paieškos laukelius ir pirmiausia iš-de-buginti script'ą, kuris grąžina paieškos rezultatus per AJAX'ą.

Puslapis su paieškos laukeliu -> JS -> script'as, kuris gavęs parametrus atlieka paiešką -> JS -> rezultatų atvaizdavimas puslapyje

Toliau - paminėjai, kad lentelės ir stulpeliai yra UTF8_*, bet nepaminėjai ar duomenų bazė yra UTF8_* koduotėje - tas, kartais būna svarbu.

Taoliau - stulpelis, gali būti UTF8 koduotėje, bet duomenys, ten įrašyti, gali būti kitu formatu, "seniau, kai dar viskas buvo kreivai padaryta" ir pan. Aišku, jeigu tau per PMA užklausą rodo gerai, tai čia mažai šansų, kad kažkas blogo yra lentelėse, todėl klaidos paieškos prioritetas lieka PHP/JS scriptai.

Taip pat užklausose galima nurodyti kokią koduotę naudoti: SELECT ... FROM ... COLLATE `utf8_*****`

Gal dar ką nors naudingo rasi čia:
http://www.mysql.lt/wiki/Lietuviskos_raides
http://akrabat.com/php/utf8-php-and-mysql/
http://tympanus.net/codrops/2009/08/31/ … -8-issues/
http://www.phpwact.org/php/i18n/utf-8/mysql
http://webcollab.sourceforge.net/unicode.html
http://www.oreillynet.com/onlamp/blog/2 … n1_t.html/

Re: Mysql neranda lietuviškų raidžių

Po kelių dienų erzinančio siūlo galo ieškojimo išsiaiškinau, kad mysql užklausa su LIKE ieško tik STRING tipo laukeliuose (o gal dar kažkur?), pas mane buvo vienas DATE nustatytas, dėl to metė klaidą dėl collation nesuderinamumo.. Ačiū minde kad stengeis padėt :)