ugrás a tartalomhoz

MYSQL kódolási hiba, de miért?

Bitman · 2007. Jan. 10. (Sze), 01.15
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...
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..
A válaszokat előre is köszönöm!

Ákos
 
1

debug

tothmate · 2007. Jan. 10. (Sze), 01.44
Szia!
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
2

Ezzel kezdtem

Bitman · 2007. Jan. 10. (Sze), 02.33
Köszi a linket, de persze ezt olvastam el elsőként..
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..
CREATE TABLE `teszt` (
  `teszt` text character set utf8 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO `teszt` VALUES ('ű');
Ha az egybevetés utf8_general_ci, akkor is változatlan persze..

include("config.php");
include("include/connect.php");

header("Content-type: text/html; charset=UTF-8");


if(strlen($_POST[szoveg])>0) {
	mysql_query("INSERT INTO teszt VALUES ('$_POST[szoveg]')");
}

echo"<form method=\"post\" action=\"teszt.php\">\n";
echo"Szöveg: <input type=\"text\" name=\"szoveg\" /><br />\n";
echo"<input type=\"submit\" value=\"Beír\" />\n";
echo"</form>\n";

echo"Lista:<br />";
$query = mysql_query("SELECT * FROM teszt");
while ($info = mysql_fetch_array($query)) {
	echo $info['teszt']."<br />\n";
}
3

Kliens kódolása

siposa · 2007. Jan. 10. (Sze), 11.10
Kliens kódolása is UTF-8? Ha "insert" előtt küldesz "set names UTF8"-at, akkor is hibás?
5

set names

error · 2007. Jan. 10. (Sze), 12.08
Igen ez szokott a leggyakoribb hiba lenni. Szerintem érdemes a mysql_connect után mindig kiadni a SET NAMES 'utf8' -at.

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

utf8 minden

Bitman · 2007. Jan. 10. (Sze), 16.18
Helló!

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!
4

phpmyadmin "min áll"?

Táskai Zsolt · 2007. Jan. 10. (Sze), 11.21
abból, amit írsz, úgy tűnik, a phpmyadmin valamiért nem UTF-8-ban kezeli az adott mezőt. biztos UTF-8-as mezőről (és tábláról) van szó? a phpmyadminban nincs bekapcsolva valami override funkció (szerintem ilyen nincs, de akár lehet is)?