MYSQL kódolási hiba, de miért?
Sziasztok!
Kénytelen vagyok egy kis segítséget kérni tőletek. Egész délután ezzel a problémával szívtam, és sajnos még mindig nincs meg a megoldás, pedig elég sok cikket, fórum témát elolvastam ezzel kapcsolatban, persze mint lenni szokott ismét tanultam sok újat (meg szokásomhoz híven itt-ott el is kalandoztam), de sajnos ennek ellenére a hiba nem oldódott meg.
Na szóval van egy adatbázis, utf-8 kódolással. Van egy oldal, ami ebből az adatbázisból dolgozik, és van egy phpmyadmin is, ami szintén.
Ha phpmyadminon keresztül viszek fel valamilyen ékezetes adatot az adatbázis akármelyik táblájának akármelyik text típusú mezőjébe, akkor a phpmyadminban tökéletesen látszik, szerkesztésnél is a beírt adat van a szövegmezőbe.
Az oldalam viszont a phpmyadminban helyesen látszó adatot rosszul jeleníti meg, az ékezetek helyén kérdőjelek vannak. Természetesen php-ból küldök utf-8-as content-type fejlécet, sőt meta tagben is szerepel ugyanez.
Oké, gondoltam kipróbálom, hogy a weboldalon keresztül viszek fel valamilyen ékezetes szöveget (próbáltam formon keresztül, használva az accept-charset="UTF-8" paramétert, és próbáltam úgy is, hogy a php szkriptben lévő mysql insertbe írtam bele közvetlenül az ékezetes szöveget, természetesen a fájl utf-8 kódolású).
Ezekben az esetekben pedig a phpmyadminban így látszik például a belépés: "BELÉPÉS".
Az oldalam tökéletesen jeleníti meg, magyar ékezetekkel.
Nyílván nálam van valami hiba, de egyszerűen nem tudok rájönni...A válaszokat előre is köszönöm!
Ákos
■ Kénytelen vagyok egy kis segítséget kérni tőletek. Egész délután ezzel a problémával szívtam, és sajnos még mindig nincs meg a megoldás, pedig elég sok cikket, fórum témát elolvastam ezzel kapcsolatban, persze mint lenni szokott ismét tanultam sok újat (meg szokásomhoz híven itt-ott el is kalandoztam), de sajnos ennek ellenére a hiba nem oldódott meg.
Na szóval van egy adatbázis, utf-8 kódolással. Van egy oldal, ami ebből az adatbázisból dolgozik, és van egy phpmyadmin is, ami szintén.
Ha phpmyadminon keresztül viszek fel valamilyen ékezetes adatot az adatbázis akármelyik táblájának akármelyik text típusú mezőjébe, akkor a phpmyadminban tökéletesen látszik, szerkesztésnél is a beírt adat van a szövegmezőbe.
Az oldalam viszont a phpmyadminban helyesen látszó adatot rosszul jeleníti meg, az ékezetek helyén kérdőjelek vannak. Természetesen php-ból küldök utf-8-as content-type fejlécet, sőt meta tagben is szerepel ugyanez.
Oké, gondoltam kipróbálom, hogy a weboldalon keresztül viszek fel valamilyen ékezetes szöveget (próbáltam formon keresztül, használva az accept-charset="UTF-8" paramétert, és próbáltam úgy is, hogy a php szkriptben lévő mysql insertbe írtam bele közvetlenül az ékezetes szöveget, természetesen a fájl utf-8 kódolású).
Ezekben az esetekben pedig a phpmyadminban így látszik például a belépés: "BELÉPÉS".
Az oldalam tökéletesen jeleníti meg, magyar ékezetekkel.
Nyílván nálam van valami hiba, de egyszerűen nem tudok rájönni...
PHP: 4.3.10-18
MYSQL: 4.0.24
phpMyAdmin 2.6.2-Debian-3sarge3
Hát koránt sem friss verziók, de nem az én szerverem..
Ákos
debug
Ajánlom figyelmedbe az alábbi cikket, amien ha megoldásst nem is, de hozzá vezető módszereket biztos találsz:
http://weblabor.hu/cikkek/karakterkodolasiproblemakkikuszobolese
Ákos
Ezzel kezdtem
Ebből vettem pl az accept-charset paramétert is.
De gyakorlatilag nem szükséges, a lenti gyorsan összedobott teszt szkripttel be tudok írni bármit az adatbázisba úgy, hogy az lekérdezéskor jól jelenjen meg. pl ő -> ő, ű -> ű.
Ugyanakkor phpmyadminban ezek így látszanak:
ő -> Å‘
ű -> ű
Végülis ezzel csak annyi bajom van, hogy ha szükségessé válik, akkor manuálisan nem tudom a phpmyadminban átírni az adatot, vagyis át tudom, de ha beírok egy ő betűt, akkor abból nem lesz Å‘, azaz ő betű helyett egy kérdőjel fog megjelenni az oldalon, ahol lekérem, felhasználom az adatot a DB-ből..
Nem tudom, hogy normálisnak mondható-e, hogy ez így jelenik meg a phpmyadminban, ami szintén utf-8 kódolással megy elvileg. Mert szerintem nem, pl hogy írok át így vele normálisan bármilyen adatot..? Mert enélkül kb értelmét veszti az egész..
Kliens kódolása
set names
Nem ide tartozik, de tudom ajánlani a setlocale(LC_ALL, 'hu_HU.utf8', 'hu_HU') parancsot is. Ha a szerveren telepítve vannal az UTF8-as locale-ok, az strftime és társai is UTF8-ra váltanak (Windows-on nem nyert).
utf8 minden
Kipróbáltam ISMÉT a "set names 'UTF8'"-at a teszt php-s mysql insert szkriptben, és ha ezt a mysql parancsot kiadtam neki még az insert elött, akkor az ő betű ő betűként látszik a phpmyadminban is, illetve rosszul látszott a készülő oldal php kimenetében...
Betettem oda is a "set names 'utf8'" parancsot miután csatlakozok a db-hez, és lássatok csodát tökéletesen működik.
Én voltam a láma, megszivattam magam ismét, de legalább egy életre megjegyeztem ezt is... Hát ugye minden rosszban van valami jó.. :)
Köszönöm mindenkinek a segítséget!
phpmyadmin "min áll"?