MySQL, UTF8 i sort po naški
Muci me jedan problem. Podaci u tabeli su UTF, i odna stana za polje je utf i sve lepo radi (na sajtu se vide nasa slova, TOAD cit aipise u utf8) ali ORDER BY ima kvaku. Naime ne razlikuje s i š. Njemu je to isto slovo. Ne bi bio toliki pbroblemkad abi bar u sortu prvo stavi sve na s pa onda sve na š ali ne, on prostor ne pravi nikakvu razliku...
Ubih se tražeći na netu neki hint ali što više tražim sve više mise čini da je ovo nerešen problem. Nije valjda da ću morati da pristupim starom dobrom dupliranju kolone da bih u dodatnu upisivao oblik teksta koji se da ispravno sortirati? |
Mislim da je problem do collation-a. Probaj da setujes na slovenacki - utf8_slovenian_ci (koliko vidim samo on postoji).
|
Nedavno sam izgubio par sati tragajuci za odgovarajucim UTF8 i UCS2 collation-om za nasu azbuku/abecedu, i ni traga od savrsenog resenja.
Naime, problem je u tome sto postojeci collationi, iako uglavnom korektni, ne obracaju paznju na neka nasa slova, kao i u tome sto je za nas jezik potreban dvoslovni collation (zbog slova kao sto su dž, nj, lj, koja se nalaze na pogresnom mestu prilikom sortiranja). Tada sam natrcao na post na ES-u (randomov, cini mi se), u kom je objasnjeno kako napraviti sopstveni collation, a zatim ga i kompajlirati. Sto se cirilice tice, tu je pesma malo drugacija, ali nista veselija.. Cirilica nema dvokarakternih slova, ali zato ne postoji ni srpski cirilicni collation :) Ukratko, imas mysql komandu SHOW COLLATION, pa vidi sta ti je na raspolaganju, i igraj se malo dok ne vidis sta ti najvise odgovara. |
Citat:
|
well... on je na mysql paycheck-u, nista ga ne sprecava da contribuje malo. :)
|
Citat:
|
exactly :)
|
Citat:
Dakle, jasna situacija gde zajednica treba da gura u pravcu u kome žele da se stvari razvijaju. |
A koliki je to posao da se napravi collation? To je valdja samo tabela na osnovukoje se radi obrada.
|
Razgovarao sam ja sa Sinisom o srpskom collationu na cirilici i pitao ga zasto to nije uradjeno. Odgovorio mi je da su croatian collation uradili neki tipovi, koji nisu dio MySQL tima, a da se njemu srpski collation ne da raditi licno, posto je on sad Senior Support Manager i ne radi u developmentu kao ranije.
Dao mi je neka uputstva, gdje da nadjem informacije o tome i da pogledam neke primjere, pa sam ja kontao uraditi srpski collation za MySQL, ali nikako da uhvatim volje i vremena, da sjedem cestito i prionem na taj zadatak. Mozda ako bismo ovdje svi zajedno pokusali, pa da iznjedrimo taj collation... |
ajde dajte nek linkove i informacije o pravljenju collation tabela, ono sto znate... cisto za pocetak, posto ja nikako da nadjem neke primere kako se to radi...
|
Unfortunately there is no documentation on how to create UTF8 collations.
But adding a new collation can be very easy. You need to edit these files: strings/ctype-uca.c mysys/charset-def.c Use swedish as an example. Also, note that: 1. Many languages are compatible with utf8_unicode_ci. So you don't need to create separate collations for them. For example German, French, Russian, Armenian, Greek. 2. Our Unicode Collation implementation have some limitations. It is currently not possible to create real full featured collations for ALL languages. For example, Hungarian have very complex contraction rules, i.e. when a combination of several letters is treated as a single sorting element. If you list all the languages you need, I could comment which of them can be implemented easily, and which of them require additional coding. http://forums.mysql.com/read.php?103...5093#msg-25093 Potrazicu clanke sa konkretnim uputstvima pa cu postaviti. |
Slicne putokaze je i meni dao Sinisa, s tim da me uputio i na strings/ctype-utf8.c, konkretno na matrice MY_UNICASE_INFO, kao i na share/charsets XML datoteke.
Nazalost, nisam u praksi sa MySQL-om imao potrebu za cirilicom, pa tako ne mogu ni reci nesto iz licnog iskustva. Evo nabrzaka sam nesto testirao na cirilici koristeci cp1251_general_ci , pa cu sutra napisati vise o tome. |
Cekamo rezultate :) Sad sam procitao da bi cp1251 (koji si koristio), koi8_ukr i win1251_ukr trebalo da podrzavaju cirilicu u potpunosti. Time will show. A sto se tice konkretnih uputstava za razvoj collationa slaba vajda, nigde nisam nasao.
Edit: http://downloads.mysql.com/docs/internals-en.pdf |
Ne moze se koristiti cp1251 za collation. :(
Napravio sam par testova sa raznim collationima, pocevsi od cp1251_general_ci, preko cp1251_ukrainian_ci, pa do cp1251_bulgarian_ci. Kreirao sam jednostavnu tabelu sa dva polja: Kôd:
Kada pokusam unesena imena sortirati, dobijem slijedeci rezultat: Kôd:
SELECT ime FROM test_cp1251 ORDER BY ime; |
Mozda ipak ima sanse? ;)
Kôd:
PHP kôd:
Citat:
Kôd:
Kôd:
Ako neko ima vremena i volje, nek testira dalje, da li se ovaj collation moze koristiti ili ne. Osim toga, koga zanima ovaj collation, moze detaljniji redoslijed sortiranja pogledati ovdje: http://d.udm.net/bar/~bar/charts/utf8_unicode_ci.html |
Hm, pa ovaj redosled je sasvim u redu. Pitam se sta sam prevideo kada sam testirao utf_unicode_ci collation? U svakom slucaju, UTF8 cirilica vise nije problem :)
Ali i dalje ostaje pitanje, sta sa latinicom? ;) |
I jos nezgodnije pitanje, sta ako su cirilica i latinica pomesani?
|
Citat:
@Pedja: Pa koliko vidim po redoslijedu, utf8_collation_ci bi trebao ispravno sortirati i kad je izmijesano, ali nisam siguran bez testiranja. Jebga, u zadnje vrijeme radim iskljucivo sa Oracleom, a jako malo sa MySQL-om, tako da iz prakse ne mogu nista reci... |
Off Topic: Izvinjavam se što dižem temu iz mrtvih... Maločas opet pogledah utf8_unicode_ci raspored, i primetih jednu stvar: u collationu se nalaze naša slova "dž", "lj" i "nj" kao jedno-karakterni simboli, i što je najbolje nalaze se na odgovarajućim mestima. Ostaje pitanje: zašto Windows ne menja mapiranje tastera Q, W i X jedno-karakternim simbolima slova DŽ, NJ i LJ (verovatno sam omašio redosled respektivnih slova)? (Da nisam primetio da GNOME to radi, ne bih ni postavio ovo pitanje...) Sudeći po tom collationu, problem naših dvo-karakternih slova je rešen. Samo što retko ko može uopšte da koristi baš te znakove... Jedine "zamerke" koje imam na collation je to što prilikom sortiranja, slova C, Č i Ć imaju istu težinu - tretiraju se jednako, baš kao i S i Š, Z i Ž), i to što ćirilična slova nisu uglavljena na odgovarajuće pozicije između latiničnih slova... |
Vreme je GMT +2. Trenutno vreme je 13:16. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.