MySQL order by in šumniki

Dejstva:
- HTML charset: utf8
- kodiranje datotek: utf8 without BOM
- ob povezavi z bazo se izvede "SET NAMES 'utf8' COLLATE 'utf8slovenianci'"
- encoding polja v bazi je utf8slovenianci, tip je varchar
- php header za utf8 charset

Order by najprej prikaže rezultate, ki se začnejo s š, ž in č ter nadaljuje normalno po slovenski abecedi.

Obstaja kakšna elegantna rešitev?

EDiT: Naj še omenim, da so šumniki v bazi zapisani kot Å , ž in Ä, na strani pa se prikazujejo pravilno.

13 odgovorov

Preveri se enkrat vse encodinge, ker če bi blo vse ql bi v bazi videl čšž.

2

+1 carli, preveri še collation od tabele in baze

Phpmyadmin pravi, da je collation baze, tabele in polja utf8slovenianci, kodiranje datotek je definitivno UTF8 brez BOM (preveril v notepad in php eclipse), v HTML je meta content-type utf-8, query za collation se izvede takoj za mysqlselectdb, php header se izvede takoj na začetku.

Res mi je rahlo čudno vse skupaj.

Poizkusi spremenit en znak za čšž v bazi v sam č ali š pa poglej kaj ti vrne? Namreč če si kasneje spremenil encoding se znaki ne spremenijo sami.

... ali pa če je uvozil iz baze z drugačnim collationom.

Če vpišem direktno v phpmyadminu, se na strani prikaže '<?>' (če vesta, kaj mislim). Do izvoza/uvoza baze ni prišlo, vsi podatki so vnešeni preko form in v bazo se zapišejo brez kakršne koli spremembe.

Bi mogoče lahko bila kriva Apache nastavitev AddDefaultCharset (ki je privzeto nastavljena na UTF-8, kar naj bi bilo ok)?

Tale default charset je, kolikor razumem, samo za nastavitev default charseta odgovora s strani strežnika klientu

Kako pa zgleda ta ročno popravljen znak v phpmyadminu? Če je ok, je samo pri outputu problem

Znak v phpmyadminu je enak. Če vnesem 'č' v input na strani, se na strani prikaže 'č', v phpmyadminu pa 'Ä'; če ga vnesem v phpmyadminu, se v tam prikaže kot 'č', na strani pa kot '<?>'.

Ko vpisuješ tudi uporabljš SET names utf8?

Edini problem tukaj je SET Names utf8, ali pa da string ni v UTF8, ampak v CP1250 s strani PHP-ja. Bolj sumim set names utf8.