Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL ja ongelma UTF-8 -merkkisatsin kanssa

Triskal [21.02.2008 12:00:29]

#

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?

Merri [21.02.2008 14:36:11]

#

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ää).

Triskal [21.02.2008 14:55:03]

#

Asia ratkesi, http://www.adviesenzo.nl/examples/php_mysql_charset_fix/ tiesi asiasta jonkin verran.

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta