[ tOwk @ 16.08.2002. 23:21 ] @
Trenutno ,,stabilne'' verzije MySQL-a nemaju podršku za UTF8 sortiranje i poređenje. Čak ni novije verzije nemaju takvu podršku (imaju samo podršku za UTF8).

Ono što je meni trebalo je mogućnost sortiranja redova iz MySQL baze napisanih srpskim jezikom. Zbog poznate pojave da je latinica gotovo izjednačena sa zvaničnim srpskim pismom ćirilicom, želeo sam da upravo tako i bude u sortiranom poretku.

Problemi koji se javljaju je da je Ljuba > Lutalica > Ladno (Lj se ponaša kao jedno slovo). Kako je ćirilica jednoznačna, sa njom nema problema.

Iskorišćene su neke ideje iz UCA (Unicode Collation Algorithm), naročito kontrakcija slova (L, J prelazi u jedno; međutim podrška je nešto opštija pa je moguće imati kombinacije od ,,neograničeno mnogo'' znakova koji predstavljaju jedno slovo). Ipak, veći deo UCA je izostavljen.

Baza slova se učitava iz eksternog fajla, i zato je veoma fleksibilna. Takođe, ona se učitava najviše jednom pri jednom pokretanju MySQL servera, pa neće zauzimati previše prostora u memoriji. Naravno, nedostatak ovoga je što morate restartovati MySQL server ako izmenite bazu slova.

Pored toga, ulazni format je prilično striktan (nema komentara, prvi red je tačno određeno kakav mora biti i slično), a kod nije optimizovan (npr. pretragu stabla bi trebalo ostvariti nerekurzivno: 5 minuta posla za nekog zainteresovanog za ubrzanja i ko koristi veću bazu slova; ja imam bazu od 2-3 hiljade knjiga i to mi nije značajno pa sortiranje iste nije toliko dugotrajno).

Kako je to još uvek kod u razvoju, prva verzija (sa dodatim nebuloznim komentarima na engleskom jeziku radi slanja na [email protected]) je dostupna na http://alas.matf.bg.ac.yu/~mm01142/mysql-srpski

Nije namenjena početnicima, i zato neću dati uputstvo kako se instaliraju ti fajlovi. Napominjem da je potrebno rekompajliranje i klijent programa (kao što su PHP i slično) da bi korektno sve radilo (PHP odbija da radi). Za dalje instrukcije pogledajte sam kod i MySQL uputstvo. Testirano samo sa MySQL 3.23.51 na Slackware Linux 8.0 + PHP 4.1.1 (kao dodatni, eksterni test klijent, pošto mysql radi bez problema).

Za zainteresovane, UCA je TR10 na Unicode.org.
Ponovo, adresa je
http://alas.matf.bg.ac.yu/~mm01142/mysql-srpski/ctype-srpski.c
i
http://alas.matf.bg.ac.yu/~mm01142/mysql-srpski/srpski.txt

Još nisam uspeo da nateram LIKE da koristi my_strcoll_srpski, mada nisam ni pokušavao, pa je to jedino što je preostalo da se reši.

Ukoliko je nešto nejasno, slobodno pitajte (a ima mnogo toga što bi moglo biti; nisam se baš potrudio oko dokumentacije za sada).


Nadam se da je ovo zanimljivo nekome, i naročito ističem da je kod dovoljno fleksibilan da se može koristiti i za razne druge jezike i UTF8 skup znakova bez ikakvih izmena, tj. samo treba menjati ,,bazu slova'' srpski.txt.

Toliko

PS. Ko god želi da vidi kako ne treba pisati programe, može da pogleda ovaj moj C kod. Kao jedino opravdanje mi služi da je napisan u toku jedne noći.erani optimista po pitanju blis