csak egy buta arnyek
Vótmá (eddigi posztok):
We can check your plugins and stuff
2007-10-04 06:22:07
nincs kategoria
Az ördög nem alszik, Isten nem bottal ver és hasonló klisék igazságtartalmáról fogok itten nyilatkozni.

Kezdjük a konklúzióval. Rövid válasz: igaz. A bejegyzés többi része a hosszú válasz, ami már már epikus, de legalábbis eposzi tulajdonságokkal rendelkező.

Szóljon hát, végtelen w00t és n00bság mezein edzett fületekbe, eme rege, lol.

Vegyünk tetszőleges mySQL adatbázisszervert és egy UTF-8 karakterláncot. Próbáljuk meg PHP segítségével a karakterláncot bármilyen táblában visszanyerhető formában tárolni. Ó! Bazdmeg. Itt jön a deus ex machina, az apokalipszis lovasainak enumerációja meg is történt (lásd fentebb, rögvest az in medias res után, az invokáció előtt). Tehát a beígért cselekménymozzanat, amikor is tetszőleges felsőbb (alsóbb) hatalom úgy döntött, hogy ezt a feladatot közel lehetetlenné teszi, ezzel büntetve az egyszerű, ám de web-babér aspiráns bölcsész-informatikus krosszóver fattyakat, akik szövegelni is akarnak, meg mégse.

Ha hatalmunk omnipotens, már-már rootszerű, akkor ugye kényünkre kedvünkre konfigurálhatjuk a dolgokat, ami jó, de még mindig csak oly' értékes, mint Dávid öccsének a törött játékparittyája Góliát félisten nagybátyával szemben.

Szóval messze zengő hangunkon begépeljük, hogy a mySQL szerver alapból utf8 kódkészletet használjon mindenhol. Ezt az installálásnál megkérdezi. Ugyan már megmutatkozik a foga fehérje, hisz' defaultnak a latin2 van berakva, és kriptikus előreutalások formájában ad csak hírt arról, hogy mennyire nem jó az nekünk jelen esetben.

Feltelepült, megáldatott, megkereszteltetett, körülmetéltetett, felkenetett, szenté avattatott, system service-szá tétetett mySQL 5.0.45-community-nt installációnk üzemképes. Root jelszó beállítva, szuper. Sikeresnek érezzük magunkat. (Nyilván csak így fog ütni a katarzis)

Alapból a legújabb PHP 5-öt van fent, meg tetszőleges Apache. Eztán a php.ini-ben a nehézsúlyú .510-es kaliberű mysqli extension betöltve, igazi ínyenceknek való, speciálisan kifejlesztett, uránmagvas, mindent visz. Lágyszívűbbek beérhetik akár a .357-es mysql-lel is, i nélkül.

Ha hamar végezni akarnánk a felvezetéssel, akkor feltehetnénk a bleeding-edge phpMyAdmin 3.0.0-dev verziót, ami csak utf8-at támogat, de valószínűleg az meg túl bugos lenne, és elrontaná a mélylélektant a gecibe.

Maradjunk a megszokott latest-stable megoldásnál (legutolsó stabil, phpmyadmin.net) feltesszük, beállítjuk (, de az egy másik mese, most kihagyjuk a pokol egyéb köreit és bugyrait, Beatricse már vár, habár nem egészen ott, ahol azt megszokhattuk, m~hahaha).

Létrehozunk egy adatbázist meg egy táblát és örülünk hogy tudunk bele tenni egyszerű szövegeket.

Létrehozunk egy új felhasználót, meg neki egy adatbázist, hogy had buzerálja a phpMyAdminnal, mert az úgy szokás. (Mármint nem a phpMyAdmin része a hagyomány ebben)

Oké, eddig nem is volt olyan vészes, hah. Gyorsan kattintunk is a PHPEdit ikcsyjén a gyorsíndításnál a tálcán, gyorsan megkomponálunk pár sort, majd gyorsan kipróbáljuk.

$kapcs = mysqli_connect('localhost','józsi','szeretlek_piri');
mysqli_select_db($kapcs, 'józsi');
$kv = mysqli_query($kapcs, 'INSERT INTO teszt SET adat="útéefnyóc sztring sok ő-vel.. jól!"');


Elmentjük, UTF-8 kódolással, mondjuk teszt.php néven bele a webszerverünk által kiszolgált könyvtárak valamelyikébe.

Igen, most jön az, hogy vagy hibaüzenetet kapunk, vagy egyszerűen kérőjelek, krix-kraxok, téglalapok, egyéb szimbólumok foglalják el a szép ékezetes betűink helyét, ha megnézzük phpMyAdminnal a tábla tartalmát.

Na jó, akkor jöhet a lényegi momentum, amikor is a krosszóveres hősünk megkapja a jóslatot, hogy létezik a fehér elefánt, tehát meg lehet csinálni jól is ezt.


mysqli_query($kapcs, 'SET NAMES utf8');

Mert az jó, ha a biztonság kedvéért, mindenféle változót, ami a kapcsolatra vonatkozik beállítunk ilyenre.

Persze, még nem vagyunk sehol, legalábbis Zrinyi ekkor még élt (jah, meg a szelíd vadmalac is), Odüsszeusz a nimfá(ka)t kefélte, akár csak Gilgames, aki meg a haverjával, Enkiduval szaunázott, úgy finn módra, szorosan.

Tehát mit is kéne tennünk, hogy működjön a dolog? :|
Segít a kellékes. Én ehhez hasonló buggal találkoztam. Szinte Dunát lehetne rekeszteni az utf8-cal, annyiszor szerepel ebben a bug reportban, de kiderül, hogy mégis csak latin1 kódolás keveredik a Hétszünyű Koponyáni monyó levesébe. (Egyesek szerint pl. Firefox helyesírási szótár: Kaponyányi ill. Google keresés eredményeképp: Kapanyányi monyók, de omfg, majd otthon megkeresem az általános iskolás könyvemben, de mivel ez egy népmese nincs kanonizálva, lehetne akár Hipergenyó Terrortörpe is :P)

Szerencsére nagyon jól szórakozom, miközben ezeket a sületlenségeket örökítem meg, de valahogy úgy sejtem, kezdek magányosodni :D

Hol is tartottam? Jah igen. Van egy olyan, hogy collation. Elvileg arra való, hogy ha azt mondom, hogy SELECT a,b FROM t WHERE a > b; ahol a és b is string (varchar, text), akkor a collation fájl alapján végzi az összehasonlítást/kiértékelést.

Tehát ha belegondolunk, ennek semmi köze nincs a tényleges tároláshoz. Hát .. tévedünk. Ennek örömére itt egy kis motiváció. :]

Szóval a fabula végkifejlete, hogy jól meg kell erőszakolni a hollót, akkor elejti a saj-- .. és akkor .. öö .. mindenhol ahol csak lehet UTF-8-at kell beállítani. Még ott is, ahol semmi értelme.

Várból kirohanás, buzi kérők lemészárlása, tetszőleges beugratós kerekes-üreges állatok segítségével bármely Trója típusú vár bevétele, stb..

Én meg alszok, de minek, úgy tűnik túl pihentem magam így is :)

Az egész különben azért volt, mert a 291-es posztban a µ (mű) átváltozott µ -re aztán visszaírtam, de kérőjel lett belőle. Pfff.




Milyen nap van ma?

Megkíméljelek egy kis gépeléstől legközelebb?