Šta je novo?

Encoding mess....

kUdtiHaEX

Super ridža
Administrator
Učlanjen(a)
18.07.2001
Poruke
18,291
Poena
1,445
Moja oprema  
CPU & Cooler
Intel® Core™ i5-9500F, NZXT Kraken Z63
GPU
Asus GTX 2070 Super
Storage
Samsung 980 Pro NVMe 1 TB
Kućište
NZXT H210i
Monitor
LG C2 42"
Miš & tastatura
Logitech G502, Keychron K8, Nuphy Air75, Ducky TKL One 2
Ostale periferije
Glupi HP štampač
Laptop
Apple Macbook Pro 14" M1
Tablet
Apple iPad Pro 11"
Mobilni telefon
Apple iPhone 13 Pro Max
Pametni uređaji
Apple Watch Ultra
Pristup internetu
  1. Kablovski internet
...od kojeg polako pocinje da me boli glava 😉

Elem imam jednu bazu (utf_unicode_ci) i tabelu sa gradovima (tabela je setovana kao utf_general_ci, sva polja su utf_general_ci).
Gradovi imaju u nazivima nasa slova: Š, Ð, Č, Ć, Ž, š, đ, č, ć, ž.

Kada uradim prost kveri tipa:
Kod:
SELECT * FROM `gradovi` ORDER BY naziv_grada ASC

izlaz koji dobijem je tipa:
Kod:
 	 	 	ŠEKOVICI
 	 	 	ŠIPOVO
 	 	 	ŠIROKI BRIJEG
 	 	 	ALEKSANDROVAC
 	 	 	BANJA_LUKA

i ocito se da primetiti da gradovi nisu poredjani po abecedi iako sam ja to trazio.

Ako uradim sledeci kveri:
Kod:
SELECT * 
FROM `gradovi` 
WHERE `naziv_grada` LIKE '%Š%'
LIMIT 0 , 30

dobije gradove koji imaju i S i Š u svom imenu. Isto vazi i za ostala slova...
Naravno, ako uradim to ovako:
Kod:
SELECT * 
FROM `gradovi` 
WHERE `naziv_grada` LIKE '%Š%' AND naziv_grada NOT LIKE '%S%'

logicno, ne dobijem nijedan rezultat jer ocito MYSQL konta i S i Š kao isto slovo (sto nema nikakve logike, al ajde).

Posto ja vise nemam ideje sta da radim (menjao sam enkodinge, pozivao COLLATION u SELECT kverijima, izvodio mambo-jumbo gluposti sa PHP-om) da li iko ima ideju kako da izvrsim sortiranje po abecedi? :wall:
 
Setovao sam tabele, polja i celu bazu kao utf8_bin i uspeo da sredim problem prepoznavanja karaktera. Medjutim, sortiranje i dalje ne funka 🙁
A to sa gornjeg linka ne pomaze...
 
Poslednja izmena:
Na tom linku i imaš komentar developera da im je to poznat problem i da još uvek rade na tome (doduše komentar je iz 2006).
 
Videh ali to nije nimalo utesno za mene 😉
Resenje mora postojati...
 
Ideja - zašto ne probaš da sortiraš niz u PHPu umesto u MySQL kao što sada radiš?
 
Probao sam da ga sortiram ali nisam nasao zadovoljavajuci rezultat.
Posto je stvar bila hitna i vremena malo, problem sam resio seljackom metodom: ako firma počinje na Š, lepio sam S na početak i dobijao SŠ. Onda sam radio sort i dobio takvu tvorevinu na svom mestu i posle samo uklonio S 🙂 Ista priča važi i za ostala slova.

Nije baš neko rešenje ali sredilo je stvar.
 
Evo MYSQL kveri za sortiranje:
Kod:
SELECT * , replace( replace( replace( replace( replace( naziv_firme, 'Č', 'Cxx' ) , 'Š', 'Sx' ) , 'Ž', 'Zx' ) , 'Ð', 'Dx' ) , 'Ć', 'Cx' ) 
FROM firme 
ORDER BY `replace( replace( replace( replace( replace( naziv_firme , 'Č' , 'Cxx' ) , 'Š' , 'Sx' ) , 'Ž' , 'Zx' ) , 'Ð' , 'Dx' ) , 'Ć' , 'Cx' )` ASC

Radi provereno 🙂 Sve sto posle treba da uradite je streplace() 🙂
 
Poslednja izmena:
Nazad
Vrh Dno