Tässä ei tunnu olevan mitään logiikkaa. WWW-sivun merkkijärjestelmänä on UTF-8, MySQL-tietokannan merkkijärjestelmänä on UTF-8, samoin kuin jokaisen tietokannan taulun vielä erikseen, mutta silti kaikissa tapauksissa tietokantaan menevä tai sieltä tuleva tieto ei ole UTF-8:aa.
Case 1: MySQL Query Browser
Kun lisään tauluihin tietoa tai selaan sitä Query Browserilla, kaikki ääkköset näkyvät oikein, mutta selain näyttää ?. utf8_encode() ratkaisee ongelman. Eli siis vaikka kuinka taulut ja kanta on määritelty UTF-8:ksi, sinne menevä tieto ei sitä ole.
Case 2: PHPMyAdmin
Sama menininki, mutta sillä erotuksella, että ainakaan viimeyrittämällä utf8_encode() ei ratkaissut ongelmaa.
Case 3: Oma sovellus
Testasin lopuksi sitä, että jos teen oman formin ja pistän sen tallentamaan tietoa tauluihin, niin miten käy. Tieto menee tauluu ja sieltä tullessaan näkyy täysin oikein, ei mitään ongelmia. Sen sijaan sekä Query Browserilla, että PHPMyAdminilla selattaessa tämä äsken lisätty tieto näkyy väärin (esim PHPMyAdmin: ä = ä).
Pohtimuksia:
Sivun merkkisatsi sekä omassa ratkaisussani, että PHPMyAdminissa on UTF-8. Omassani ei lähetetä PHP:lla headeria erikseen (eikä ole mielestäni tarviskaan) MyAdminin lähdekoodia en ole koskaan tutkinut. Eli ei mitään järkeä.
Inputtia tähän, anyone?
MySQL:n UTF-8 -asetus vaikuttaa vain aakkosjärjestykseen johon tiedot järjestetään. phpMyAdmin ja MySQL Query Browser näyttävät datan tietokannasta sellaisenaan omalla merkistöasetuksellaan, joten niiden kautta kuuluukin näkyä UTF-8 -sotkua. Jos mietit asiaa, niin MySQL ei tallenna tietoja täydessä Unicode-muodossa, vaan ihan vaan siinä muodossa mitä merkistöä sille on syötetty. Käytännössä sinun siis pitäisi muuttaa phpMyAdminin tai MySQL Query Browserin asetuksia, mutta silloin niillä ei voi käyttää mitä tahansa muita merkistöjä (mikä ei tietty haittaa jos puhtaasti UTF-8:aa aikoo käyttää).
Asia ratkesi, http://www.adviesenzo.nl/examples/
Onkelma oli siinä, MySQL:ssä on yhteydelle vielä erikseen merkkisatsimääritelmä, jonka pitää myös vastata tietokannan ja taulujen merkkisatsimääritelmää.
Kävi siis ilmi, että kaikki PHPMyAdminilla ja Query Browserilla kantaan laitettu teksti oli UTF-8:aa, mutta nimenomaan omalla skriptilläni tehty ei ollut, koska mysql_query() enkoodasi tekstin joksikin muuksi ja vastaavasti toi samassa formaatissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.