apache, mysql, űő gondok

Udv!

Valoszinuleg dunat lehetne rekeszteni az ilyen problemakkal, de valahogy megsem tudom tulverekedni magam ezen a probleman, pedig mar parszor belefutottam.

Van egy apache2 teljesen default beallitassal, alatta egy debian fut, es van egy mysql server. Ha egy postos lekerdezes eredmenyet be akarom irni az adatbazisba, az

ű

helyett pl.

& #369;

jelenik meg. Na most tcp szinten ez megy az apache2 fele:

%26%23369%3B

, ami ugye a fenti 6 karakter kodja.

Na most nyilvan azt szeretnem, hogy a bongeszo altal elkuldott

ű

karakter helyesen jelenjen meg az adatbazisban. Hogyan tudom ezt megtenni?

A mysql kodolasa jelenleg

latin2_hungarian_ci

, eredetileg valami

latin1_swedish_ci

volt, es probaltam az

utf8_hungarian_ci

- t is, de mindegyikre ugyanazt az eredmenyt kapom.

A kerdesem hogyan lehetne ezt megoldani? Az apache beallitasait lehetoseg szerint nem szeretnem valtoztatni. Annyit mondjuk kiprobaltam, hogy ha hozzaadok egy

AddDefaultCharset UTF-8

sort az apache konfighoz, akkor ez a problema megoldodik, es jok lesznek az ujbol bevitt karakterek, de ez sajna most nem jatszik, mert a fajlok, es az adatbazis kodolasa is mas. Szoval, ha lehet, mindenkeppen adatbazis (es lehetoleg csak az adott adatbazis) szinten szeretnem megoldani.

Koszi a valaszokat.

Hozzászólások

Na akkor sorjaban:
-Ranezel az orara, mert elfelejtetted beallitani. 2012 van, vazze emiatt lesz vilagvege! UTF8!!!negynegynegy!
-űő nincs latin1-ben, latin2-ben ugyan van, de itt jon elo a datum gond (UTF8!!!), szoval az sem jo igazan (altalaban, nyilvan specialis esetekben ahol az a minimalis overhead szamit, meg ahol minden ki van centizve es teljesen zart rendszer.. na de hagyjuk)
-DB BACKUP! Konfig BACKUP!
-Szoval kidumpolod a DB-t, atirsz mindent UTF8-ra, konvertalod a dumpot, visszatoltod. (biztos van ra myadmin menupont vagy a mysql doksiban kulon opcio, vagy iconv)
-Apache-ot is beallitod, hogy marpedig minden letezo cucc UTF-8, es kesz is vagy - kiveve, ha valami nagyon hulye ember fejlesztette az adminisztralasra kijelolt webes cuccot, es feltetelezte, hogy 1 char=1 byte (ebben az esetben dobd ki)

2012 van! UTF!!! Jo hogy nem jonnek elo emberek Y2K-s problemaval, hogy 12 eve leallt valami ocskavas, es valamit kene kezdeni vele. Ehh..
(Es meg csodalkoznak egyesek, hogy az IPv6 miert nem terjed.. bar lenne az IPv4-ben valami korlat, hogy mondjuk 2025-ben leall minden vagy valami, akkor legalabb lenne remeny.. /rant off)

--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.

Most meg meguszhatod - egy ideig. Mar ha szeretnel kesobb joval tobbet szivni, bar akkor a szivas garantalt. Szoval inkabb ne hallgass arra, aki azt mondja, hogy maradj ezen a vonalon.
Kulon orom DB-ben kezzel rendbetenni az arlistaban az eurojelet, a fontot, a japan jent, a kommentekben a mindenfele hulye karaktert - ami persze nem fer el 256 helyen. Tobbfele nyelvre forditott sok kulonbozo karakterkodolassal megjelenitett weboldal meg egyszeruen.. inkabb kepzeld el.. vagy inkabb ne..

(zarojelben jegyzem meg, hogy html-ben letezik olyan tag, ami azt csinalja, hogy latin1-es kalapos o-t es hullamos u-t magyarkent jelenitsen meg, de ezt nem tolem tudod, es kulonben sem arulom el, hogy mi az a tag, es ne is csinalj ilyet)

--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.

"bar lenne az IPv4-ben valami korlat, hogy mondjuk 2025-ben leall minden vagy valami, akkor legalabb lenne remeny.."
Ráhibáztál.
RIPE-os kollégák azon polemizálnak, hogy ha nem jelölnek ki egy határnapot az IPv4 leállítására, soha nem lesz átállás.

BTW, idén nem lesz világvége? ;)

Az adatbazist konnyen sikerul atkonvertalni, azzal nincs gondom, es a headert is at tudom allitani utf8- ra, de azokkal az ekezetekkel igen csak meggyulik a bajom, amelyek magabol a fajlbol jonnek. Most egy ma telepitett debianrol probalkozom, squeeze, enlightenment ablakkezelovel, locales most alapbol

hu_HU.UTF-8

. A gondom az, hogy ha a szovegszerkesztommel akarmilyen ekezetet probalok meg irni, csak ?- eket hajlando irni. Hol lehet a hiba? Sima xtermet hasznalok joe szovegszerkesztovel. xtermen ctrl + jobb clickre azt mondja, hogy az UTF-8 ki van pipalva.

Van otletetek, hogy hol lehet a problema? Remelem minden korulmenyt leirtam.

Koszi.

Igy ujraolvasva mondjuk a problema lehet nem is mysql szinten van, marmint ugye tcpflow- val en azt kaptam el, hogy a bongeszo

%26%23369%3B

- ot kuld az apache- nak lo- n, szoval mysql reszrol tok oke minden. Gondolom a bongeszo sem hibas (chrome, ff), tehat lehet megis apache2 oldalon kellene megoldani? Mondjuk ez az, hogy az apache beallitasait a leheto legkevesbe sem szeretnem megvaltoztatni, de varok minden javaslatot.

Az apache globalis beallitasainak piszkalasat igazabol ki lehet kuszobolni: van ugye .htaccess, ami a problema konyvtarszintre rugdosasa. Ill. PHP-bol meg lehet adni a headerben, hogy a content type az igazabol UTF-ben ertendo text/html, es akkor az alkalmazas szol a webservernek, semmi mas rajta futo dolgot nem ronthat el.

--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.

Meg egy par dolog:
Kapcsolat elejen legyen SET NAMES 'UTF-8'; - nem kovetem a MySQL fejleszteset - mar leszoktam rola, de artani nem fog. (azt mondja meg neki, hogy ettol kezdve mindent tekintsen utf-nek)

Lehet halogatni 2013-ra, de sokkal nagyobbat fogsz vele szivni minel kesobb teszed meg.

A latin2_hungarian_ci vagy utf8_hungarian_ci azt adja meg, hogy milyen kodolasban legyen a szoveg, ill. mi mivel egyezik (ill. hogy kell sorbarendezni). Lekerdezesenkent ugyan allithato, de az indexek miatt jobb, ha a default is ugyanaz. A hungarian azt adja meg, hogy az é az e es az f kozt fog jonni, a vegen a _ci (vagy _cs) meg a case insensitive, ill. case sensitive (szoval hogy ha Érd-re keresel, az érd-del egyezzen-e). Ez (es az ABC sorrendje) nyilvan nyelvtol/kulturkortol/orszagtol fugg.

--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.

A mysql karakterkodolasi problemak meregfoga ott van, hogy valojaban csak columnoknak van charsetj es collationje. A tabla szintu az csak egy default, ha nincs column szintu, a db szintu csak default, ha nincs tabla es column szintu, es a server global default, ha nincs db, tabla, es column szintu. Tehat ha a column definiciodban rossz charset van, konfiguralhatsz akarmit, nem fog mukodni amig a columnet at nem allitod.

én az alábbiakkal szoktam kiegészíteni az alap /etc/mysql/my.cnf megfelelő részeit még a db-k létrehozása előtt:

[mysqld]
default-character-set = utf8
default-collation = utf8_hungarian_ci

[client]
default-character-set=utf8

minden utf8, ami szöveg az utf8bin, keresésnél collate utf8_hungarian_ci collate utf8_general_ci így ha kell számit a kis és nagybetű, ékezet, ha kell meg nem.

Miutan a rendezesnel is sokat szamit, nem biztos, hogy fel tud hasznalni olyan indexeket, amit akkor hasznalna, ha a valos felhasznalasnak megfelelo modon tarolnad. Szoval ha neked mindig utf8_hungarian_ci kell (mert olyan a felhasznalas, mittomen user altal keresheto utcanev), akkor celszeru inkabb abba tenni bin helyett. Foleg ha sok sor van, kiegeszitve par indexszel.

--
In truly successful relationships...
no one wears the pants.