Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 15 odgovora
  • 5.953 pregleda

Najnovija ↓

Cirilicna / latinicna pretraga 29.09.2013. u 12:05 · pre 159 meseci #1
Za pocetak, procitao sam Bogdanov blog clanak o smecu u bazi tako da mislim da nemam taj problem. :) Dakle imam PHP formu sa pretragom koja treba da pretrazuje i cirilicne i latinicne pojmove jednako. Ako se ukuca "med" na cirilici, trebalo bi da izbaci i cirilicne i latinicne termine koji odgovaraju pretrazi i obrnuto. Koliko sam razumio, to bi trebalo da moze da odradi kolacija utf8_unicode_ci.

Encoding tabele koja se pretrazuje je utf8, a collation je utf8_unicode_ci.

Evo screenshot direktno iz mysql cli, gdje bi se trebalo vidjeti smece u bazi ukoliko ga ima, meni tu sve djeluje ok:



Gdje grijesim?
Re: Cirilicna / latinicna pretraga 29.09.2013. u 19:11 · pre 159 meseci #2
Citat:
peromalosutra: Za pocetak, procitao sam Bogdanov blog clanak o smecu u bazi tako da mislim da nemam taj problem. :)


po ovom snapshotu - nemas, dakle taj deo je ok



Citat:
peromalosutra:
Dakle imam PHP formu sa pretragom koja treba da pretrazuje i cirilicne i latinicne pojmove jednako. Ako se ukuca "med" na cirilici, trebalo bi da izbaci i cirilicne i latinicne termine koji odgovaraju pretrazi i obrnuto. Koliko sam razumio, to bi trebalo da moze da odradi kolacija utf8_unicode_ci.


jok! nisi dobro razumeo

utf8_unicode_ci ne jednaci cirilicu i latinicu, nema nijedne default kolacije koja to radi (ako ima ja sam je preskocio), dakle po unicode ci ti je

Č=Ć=C
Š=S

dakle samo su karakteri sa akcentom == karakterima bez akcenta. Ako hoces da ti to ne bude tako, tj da Č!=Ć i Č!=C i Ć!=C onda na primer uzmes utf8_slovenian_ci i dobijes to da radi kako valja. u 5.6 radi i trailing tako da ako uzmes utf8_croatian_ci onda Nj, Lj, Dz i slicna slova takodje "rade" kako treba, tj postoji jednacenje i sortiranje dvokarakternih slova. ALI TU NIGDE NEMA CIRILICE!! dakle cirilica se nigde ne jednaci sa latinicom.

E sad, zato sam ja napravio externu kolaciju gde jednacim cirilicu i latinicu ovde: http://www.mysql.rs/2010/07/sortiranje-po-azbuci-azbuka-i-mysql/
i ta kolacija jednaci cirilicu i latinicu a sortiranje radi po azbuci.

To je za sada jedini nacin da napravis jednacenje cirilice i latinice. Ja sam sa Bar-om probao da ubacim srpsku kolaciju u mysql (u isto vreme kada smo ubacili hrvatsku) ali je problem sto MySQL ne moze da nazove kolaciju srpskom i onda da je napravi 'odokativno' vec smo trazili zvanican dokument od srbije (ambasada u svedskoj, vukova zaduzbina, matica srpska, sanu i jos 4-5 institucija vezano za srpski jezik) i od vecine nismo dobili nikakav odgovor a od onih od kojih smo dobili dobili smo "nas latinica ne zanima, azbuka se sortira ovako.." te zato ni sa 5.6 mysql-om nije dosla srpska kolacija (za nju nema potrebe posto "zvanicnici" u srbistanu kazu da latinicno i cirilicno A nisu isto slovo i da ne treba da se jednace, a u default unicode_ci cirilicna slova su vec poredjana po azbuci) tako da nama ostaje jedino da pravimo kolaciju sami

nije ti ovo mnogo pomoglo ali to je sto je, ja ne stizem da se bavim sada sa svim tim, kada stignem napravicu srpsku kolaciju kao externu za 5.6 i 5.7 (ona sto sam napravio vec radi na 5.5) i okacicu na blog no sigurno ne u narednih mesec dva dana

Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Cirilicna / latinicna pretraga 29.09.2013. u 20:34 · pre 159 meseci #3
Bas suprotno, pomoglo je bas, bar ne trazim ono sto ne postoji. Prije postovanja sam prekopao net i nikako ne nalazim to sto mi treba, pa zato dodjoh ovdje.

Koliko vidim najpametnije mi je to rijesiti na aplikativnom nivou, e sad, sta je bolje:

1. da dupliram sve kolone koje ce se pretrazivati (nema ih puno, ime i opis) i stavim kopiju sadrzaja u latinici, a onda u pretrazi uvijek trazim latinicu. Koliko vidim prednost je brzina pretrazivanja, mana zauzece vise memorije / prostora, sto je vjerovatno dosta podnosljivije (bar je memorija jeftina).

2. da prilikom pretrazivanja konvertujem search term u cirilicu i latinicu (sto moze biti problem ako pretvaram latinicu u cirilicu), pa onda pretrazujem po oba kriterijuma. Mana je sto pretrazujem dva puta, pa mi prvo rijesenje zvuci optimalnije.

3. nesto trece :)

Re: Cirilicna / latinicna pretraga 29.09.2013. u 20:39 · pre 159 meseci #4
ne mogu sa 100% da ti kazem zasto je elitesecurity samo na latinici ali je jedan od bitnijih razloga sigurno pretraga :)

resenje broj 2 nije bas zgodno, resenje broj 1 je ok ako nije preveliko dupliranje podataka. zasto ne napravis srpsku kolaciju (imas tamo na sajtu kod mene tacno kako to da uradis) i resis problem "kako valja"? Ako radis sa 5.5 onaj primer radi 1/1 (ja sam ga pravio an 5.5), ako koristis 5.6 verovatno moras malo da adaptiras primer da bi proradio ali generalno je to to .. napravis sebi novu kolaciju, dodas u mysql i vozi misko, imas resen problem kako valja?

Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Cirilicna / latinicna pretraga 29.09.2013. u 20:42 · pre 159 meseci #5
nego sad se nesto mislim, trebao sam ja bosance da cimam kada smo Bar i ja pokusavali da dodamo srbistan u mysql, bosanci mi sigurno ne bi odgovorili sa "ne priznamo mi cirilicu" ili "ne priznamo mi latinicu" .. jos bi onda to i napravili .. ovako ne vredi, ja mogu da napravim patch za mysql i da ubacim ovu kolaciju direkt u kod, taj patch nikad nece biti odobren jer nam treba "zvanicni papir" :(
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Cirilicna / latinicna pretraga 29.09.2013. u 20:57 · pre 159 meseci #6
Izgleda da je ipak pametnije napraviti novu kolaciju, zvucalo mi to nesto komplikovano, ali vidim da ne treba nista rekompajlirati, samo dodam xml i restartujem mysql server sto nije tako strasno.

MySQL je verzija 5.5.*, dakle ovo bi trebalo da radi bez problema: http://www.mysql.rs/2010/07/sortiranje-po-azbuci-azbuka-i-mysql/

Btw, taj post mi je i trebao od pocetka, ne znam kako sam ga preskocio.

Hvala puno na pomoci :)
Re: Cirilicna / latinicna pretraga 30.09.2013. u 12:29 · pre 159 meseci #7
Ok, jos problema :) U Index.xml sam dodao novu serbian kolaciju u utf8 dio, restartovao mysqld i mysqld vidi novu kolaciju.

Kad uradim ovaj test, sve je ok:



Medjutim kada pokusam promjeniti kolaciju na tabeli, dobijem gresku Can't create table? Ukoliko pokusam sa nekom drugom kolacijom sve prodje ok.


Re: Cirilicna / latinicna pretraga 30.09.2013. u 12:44 · pre 159 meseci #8
hm nisam video error 1005 sa errno 1005 nikad, obicno je errno 150 (ne valja ti contraint) ili -1 (neko ime polja ti ne valja)

da li si probao da kreiras obicnu tabelu sa tom kolacijom? (samo jedno char(10) polje?)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Cirilicna / latinicna pretraga 30.09.2013. u 13:36 · pre 159 meseci
izmenjeno 1 put, poslednji put peromalosutra 30.09.2013. u 13:57
  1. peromalosutra30.09.2013. u 13:57zapis iz teksta poruke
#9
Ista stvar, ne moze da kreira tabelu sa serbian kolaciom. Google isto izbacuje samo errno 150 sto je vezano za foreign kljuceve, sto nije slucaj ovdje, pogotovo kad kreiram novu tabelu.

Code:

mysql> create table `test` (`kolona` varchar(10) character set utf8 collate utf8_serbian_ci);
ERROR 1005 (HY000): Can't create table 'infomreza.test' (errno: 1005)
mysql> create table `test` (`kolona` varchar(10) character set utf8 collate utf8_general_ci);
Query OK, 0 rows affected (0.08 sec)


Update, probao sam na 2 servera, ista stvar na oba, na virtuelnoj masini imam:

Code:
mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+-------------------------+
| Variable_name           | Value                   |
+-------------------------+-------------------------+
| innodb_version          | 1.1.8                   |
| protocol_version        | 10                      |
| slave_type_conversions  |                         |
| version                 | 5.5.24-0ubuntu0.12.04.1 |
| version_comment         | (Ubuntu)                |
| version_compile_machine | x86_64                  |
| version_compile_os      | debian-linux-gnu        |
+-------------------------+-------------------------+
7 rows in set (0.00 sec)

Re: Cirilicna / latinicna pretraga 30.09.2013. u 22:39 · pre 159 meseci #12
Odmah da se ogradim da MySQL ne koristim, ali sam otvorio ovaj XML da vidim šta tu piše i video nešto što je možda tvoj problem
U root nodu imaš atribut "max-id=99", a ti si utf8_serbian_ci stavio sa ID=1200. Možda ne može da bude veće od 99?
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: Cirilicna / latinicna pretraga 30.09.2013. u 23:16 · pre 159 meseci #13
To je to, svaka cast!

Stavio sam max id i utf8_serbian_ci id = 100 i sad je donekle ok. Kad kazem donekle, mislim na to da alter table prodje ok:

Code:

mysql> alter table business_legal_person convert to character set utf8 collate utf8_serbian_ci;
Query OK, 1115 rows affected (0.06 sec)


Select po cirilici izbacuje i latinicu:



Medjutim cirilicni nazivi su mi iskonvertovani u latinicne ("Medeni kutak" je prije pisalo cirilicom), pretpostavljam tokom alter table.. Kada dodam nove redove nakon altera, ostanu u pismu u kom su dodani, dakle sve ok. Nemam mnogo cirilice pa mogu to rucno da prekrojim, bitno je da mi od sad radi kako treba, ali eto samo da napomenem. Zakacio sam novi xml fajl u attachmentu.

Hvala puno obojici na pomoci, ES rulz. :)
Re: Cirilicna / latinicna pretraga 01.10.2013. u 10:37 · pre 159 meseci #14
Jeste da je ovo malo tangenta, ali hteo sam i ja da se ubacim.

Mi smo za pretragu počeli da koristimo SOLR i u njemu ima jedan super fazon: Unicode normalizacija 1 2.

Bogdane, da li postoji šansa da MySQL doda Unicode normalne forme u kolacije? Ne znam koliko bi to bilo komplikovano za napraviti, ali bi vrlo lepo rešilo ovakve probleme, a pošto je deo standarda ne moraju se pitati državne institucije.
Potpis
"Common sense is not so common." - Voltaire
Sviđa mi se1
Re: Cirilicna / latinicna pretraga 01.10.2013. u 11:27 · pre 159 meseci #15
da se to uskoro napravi, sanse su izmedju male i nikakve ..
implementacija trailing karaktera je otprilike zaokruzila sve feature
requestove koji su postojali po pitanju karakter setova i mysql-a tako
da se tu prica realno zavrsava ... naravno to je moje misljenje .. no
sto se normalnih unicode formi tice ja ne vidim kako to pravi jednacenje
cirilce i latinice posto latinicno B i cirilicno B nigde u unikod
standardu nisu izjednaceni
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Cirilicna / latinicna pretraga 02.10.2013. u 15:23 · pre 159 meseci #16
Ah, sad sam još pogledao, izgleda se izjednačavanje latinice i ćirilice radi u ICUTransformFilterFactory a ne u ICUNormalizer2FilterFactory.
Potpis
"Common sense is not so common." - Voltaire
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme