MySQL order by in šumniki
5 naročnikov
5 naročnikov
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
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.
Č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 '<?>'.
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.