Időzóna: (GMT +1 óra) RSS - hozzászólások

sql kódolási hiba

Szerző
Üzenet
dzseemy
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2011.07.04. Hétfő 16:20
Hozzászólások: 132
Hozzászólás Elküldve: 2014.05.15. 08:16    Hozzászólás témája: sql kódolási hiba
Hozzászólás az előzmény idézésével
Ebben a témában már nagyon régóta kutakodom mindenféle fórumokon de nem jutok düllőre.

Létrehoztam egy táblát a phpMyAdmin-ban az alábbi sql lekérdezésssel:

Kód:

CREATE TABLE book (
    id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
    title VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    PRIMARI KEY (id));

Majd a következő lekérdezéssel adatot vittem fel:

Kód:

INSERT INTO `book`(`title`, `author`) VALUES ('Árvíztűrő tükörfúrógép', 'Petőfi Sándor')

Az adatbázisban phpMyAdminban a karakterek helyesen jelennek meg. A tábla exportálásakor szintén helyesek a karakterek, azt utf8-ban menti le.

Ezt követően egy php oldalon lekértem az adatokat:

Kód:

<html>
<head>
<title>Próba oldal</title>
<meta charset="utf-8" />
</head>
<body>
<h2>Lekérdezési próba!</h2>
<p>
<?
include('start/connectvars.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$sql = "SELECT * FROM book WHERE id=1";
$ny = mysqli_query($dbc,$sql);
$row = mysqli_fetch_array($ny);
echo $row['id'] . ' azonosítójú könyv írója: ' . $row['author'] . ', címe: ' . $row['title'];
?>
</p>
</body>
</html>

Az eredményként visszakapott oldalon az ékezetek helyesen jelennek meg, kivéve a lekérdezés eredményét. Ott az ű ő helyén kérdőjel, míg a többi ékezetes betű helyén fekete rombuszban lévő kérdőjel jelenik meg.
Az sql adatbázisban mindenhol az UTF8 karakterkódolás szerepel. A php fájlt is UTF8 kodolásban mentettem el.
Próbáltam használni a mysql_query("SET NAMES utf8"); kódot is, de eredménytelenül. Maradt minden a régiben.

Készítettem egy form-os php oldalt (szintén utf8-ban) amivel ugyanazokat az adatokat vittem fel az említett táblába.
Lekérdezés után a böngészőben az újonnan felvitt adatok már helyesen jelennek meg, (a régiek még mindig nem - bár ezen nem csodálokzom).

phpMyAdminban ellenőrizve a táblát az újonnan felvitt adatok esetében ott már az ékezetes karakterek jelennek meg helytelenül ( pl ű helyett ű). Exportálás után ezt kapom vissza:

Kód:

INSERT INTO `book` (`id`, `title`, `author`) VALUES
(1, 'Árvíztűrő tükörfúrógép', 'Petőfi Sándor'),
(2, 'Árvíztűrő tükörfúrógép', 'Petőfi Sándor');


Tudna valaki valamilyen ésszerű magyarázatot adni erre, mert bármivel próbálkozom nem jövök rá a hibára, pedig már szinte mindent próbáltam php oldalról.

UPDATE:

További kutakodás után sikerült kiderítenem a hiba forrását:

Idézet:

Ez izgatott engem fel, hogy miért látok szerkeszthetetlen adatot a táblában... Rájöttem, hogy a PHP-MySQL kommunkiáció során "elveszik" az az info, hogy UTF8 karatereket küld a PHP, és hogy tessék azt UTF8-ként fogadni a MySQL-nek.

Ezért kell az init_connect sor a my.conf-ba.
Ezek után a gépemen is próbálkoztam a XAMPP állítgatásával, ami beigazolta az előbbi felvetést.

De ha nincs jogom a tárhelyen ezen beállításokat módosítani, akkor marad a következő:

Idézet:

KISS azaz keep it simple stupid (tartsd egyszerüen bután). Én azt csináltam, hogy a HTML UTF-8-ban van, ezért a kliens is UTF-8-at fog visszaadni és egy az egyben belenyomtam a MySQL-be. Charset-et nem adtam meg neki. Amikor visszakérem, ugyanazokat az adatokat kapom meg UTF-8-ba kódolva, szóval semmi probléma.

Nem tudom, hogy a PHPMyAdminban hogy jelenik meg, de azt nem használok... :)
Igaz én néha használom a phpMyAdmint, de beletörődőm, hogy ott nem azt látom amit kéne. A fontosabb lekéréseket pedig php-ban futtatom le.

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése
vtmk
Regisztrált tag
Regisztrált tag


Csatlakozott: 2014.08.06. Szerda 18:08
Hozzászólások: 4
Hozzászólás Elküldve: 2014.08.06. 18:14    Hozzászólás témája:
Hozzászólás az előzmény idézésével
a SQL -ban lehet utf-8 de pl én kíváncsi lennék start/connectvars.php-ra mert ott lehet iso van vagy üsd át iso-ra nekem speciel úgy van megoldva hogy connect file-omban iso a file-ok kódolása de átalakítom utf-re és az adatbázisom utf azt pedig iso-ban adom ki. Így sorosan van végig vezetve. És nem tudják kitalálni az eredeti kódolásom.

Felhasználó profiljának megtekintése Privát üzenet küldése
Hozzászólások megtekintése:  

Időzóna: (GMT +1 óra) RSS - hozzászólások
Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.

Hirdetés
Hirdetés