1 (edited by drs 2010-09-06 21:38:17)

Topic: kaip tesingai nustatyti koduotes ?

Sveiki,

Turiu tokią problemą su koduotėmis (bent jau aš taip manau :).
Esmė tokia: skripte visur naudoju utf8. DB koduotė utf8 lentelių bei lentelių laukų koduotė utf8, collation utf8_unicode_ci.
Po prisijungimo prie DB įvykdau užklausą SET NAMES utf8.
Lietuviškas raides rodo. Kaip ir viskas OK, tačiau
kai darau užklausą SELECT * FROM table WHERE name LIKE 'ž%' arba SELECT * FROM table WHERE name LIKE 'Z%'
abi užklausos man grąžina visus žodžius, kurie prasideda Z bei ž raidėmis. Analogiškai su ą ir A, E ir ę ir ė, I ir į ir t.t.

Taigi klausimas būtų kaip man teisingai nustatyti koduotes, kad anksčiau pateiktos užklausos grąžintų žodžius, kurie prasideda ž ar ą ar kita lietuviška raide (didžiosios mažosios neturi reikšmės)?

Iš anksto ačiū už bet kokią pagalbą.

Re: kaip tesingai nustatyti koduotes ?

griežčiausia būtų collation utf8_bin. Bandei utf8_lithuanian_ci?

3 (edited by drs 2010-09-06 23:14:09)

Re: kaip tesingai nustatyti koduotes ?

su utf8_bin kaip ir gaunasi, bet atrodo, kad užklausa gaunasi case sensitive t.y. jei selectinu pagal ą raidę tai man neselectina žodžių, kurie prasideda ą (mažąja raide)... Aišku galima daryti užklausą WHERE name LIKE 'ž%' OR name LIKE 'ž%', bet įtariu, kad čia nėra "švarus" sprendimas, nors galiu ir klysti ..

Dėl utf8_lithuanian_ci kažkaip keistai reikės jaučiu daug googlintis ... lentelėje nemažai duomenų, bet kiek spėjau grubiai permest tai su pvz. č raide atrodo  veikia, bet su ą ar ė neveikia.
Beja mano konkrečiu atveju kol kas taip nėra, tačiau jei ten dar būtų ir kitų kalbų nelotyniškos raidės kaip tada daryti ?

Re: kaip tesingai nustatyti koduotes ?

http://dev.mysql.com/doc/refman/5.0/en/ … llate.html

5 (edited by drs 2010-09-08 20:06:11)

Re: kaip tesingai nustatyti koduotes ?

Na kiek pavyko išsiaiskint tai ko gero nėra "švaraus" būdo naudojant utf8, padaryti tai ko man reikia.
Uždėjus ant lauko arba utf8_bin collation`ą arba užklausoje naudojant COLLATE utf8_bin veikia tačiau aš dar nepaminėjau vieno dalyko.
Ant lauko name yra uždėtas unique indeksas ir naudojant utf8_general_ci ar utf8_lithuanian_ci insertinus aaa reikšmę neina insertinti ąąą, gaunu klaidą, kad tokia reikšmė jau egzistuoja.
Išeitis naudoti utf8_bin taučiau jis case sensitive. Kiek pavyko išgalvoti tai versti visas raidės į mažąsias (ar didžiasias) ir taip išvengti case sensitive problemos ..

Jei būtų naudojami tik lietuviški simboliai tai naudojant cp1257_lithuanian_ci nekiltų problemų tačiau, jei reikia naudot utf8 .. sprendimo be LOWER('ąąą') neradau .. :(