ugrás a tartalomhoz

MySQL+utf8=nincs ékezet

pempe · 2005. Nov. 6. (V), 01.08
Sziasztok!

MySQL 5.0-t használok, win alatt.
A problémám az, hogy ha a karaktarkészletet utf8-ra állítom, akkor nem tudok ékezetes betűket írni az adatbázisba.

Így állítottam be a karakterkészletet:
mysqld --default-character-set=utf8 --default-collation=utf8_general_ci

Ekkor ha pl. ez az SQL parancs:
insert into tanulo (vezeteknev) values ("Ádám");

ez a hibaüzenet:
ERROR 1406 (22001): Data too long for column 'vezeteknev' at row 1

Biztosan a karakterkészlettel van a gond, mert latin2_hungarian_ci-vel működik (és ékezet nélküli szövegnél nincs hiba).

Mi lehet a hiba?
 
1

ettől még nem az a készlete

Hojtsy Gábor · 2005. Nov. 6. (V), 10.33
Először is adat akkor lesz túl hosszú, ha rövid a mezőnév szélessége. Másodszor is a default charset beállítástól még nem lesz minden tábla ilyen charset szerinti, azok létrehozáskor dőlnek el, hogy milyenek legyenek.
2

<Nincs cím>

pempe · 2005. Nov. 6. (V), 17.04
Próbálkoztam úgy is, hogy az adatbázis létrehozásakor adtam meg a karakterkészletet, de úgy sem működött.
varchar(40)-ben miért nem fér az el, hogy "Ádám"?
3

Texttel is baja van

fberci · 2005. Nov. 6. (V), 17.10
Nálam egy text típusú mezőre is ezt a hibaüzenetet írta ki.

Üdv.: fberci
4

jó jó, de...

Bártházi András · 2005. Nov. 6. (V), 20.55
No, ha másnak nem, de az archívumnak: jó lenne, tudni, hogy pontosan melyik MySQL verzióról is van szó. 5.0.15?

Amit még jobb lenne tudni, hogy amellett, hogy a szerver paramétereit beállítottad, a kliensed pontosan milyen. Milyen programmal próbálkozol (PHP, PHPMyAdmin, parancssor), milyen oprendszer alatt?

A MySQL-hez kapcsolódás után közvetlenül, ha UTF-8-at szeretnél használni, futtasd le a SET NAMES UTF8 SQL parancsot. És persze amit küldesz ékezetes karakter, az is UTF-8-ban legyen kódolva, azaz a konzolod, PHP-d, böngésződ, stb. UTF-8-at küldjön a MySQL fele. Ekkor menni fog...

-boogie-
5

<Nincs cím>

agostonl · 2005. Nov. 7. (H), 07.26
Lehet, nem ez a hiba, de engem ez szivatott...

Minden SQL utasítás elé be kellett raknom az alábbi sorokat...

SET NAMES LATIN2;
SET COLLATION_CONNECTION=LATIN2_GENERAL_CI
Nálam az adatbevitel után az ékezetek nem jelentek meg a lapon.
Ha valaki tisztában van ezekkel az adatbázis/tábla karakterbeállításokkal, dobhatna egy magyarnyelvű leírást, mert szerintem többen (köztük én is) nincsenek ezzel tisztában.
6

Ugyan az

Seemann · 2005. Nov. 15. (K), 22.03
vagy hasonló a hiba nálam is. Az adatbázisban jók az ékezetes karakterek, de a lapon megjelenítve viszont nem. PHP 5.0.5 MySQL 5.0.15
Mit lehetne tenni?
7

Mit jelent ez?

Bártházi András · 2005. Nov. 15. (K), 22.31
Mit jelent az, hogy az adatbázisban jók az ékezetes karakterek? Mivel nézed? MySQL client, PHPMyAdmin, egy desktop alkalmazás? Hogyan van ez a program beállítva, milyen konverziókat végez? A PHP oldalad milyen kódolással jeleníti meg az oldalt, iso-8859-2, vagy utf-8 kódolással? Dupla karaktereket vagy kérdőjeleket látsz? És még sorolhatnám... :)

-boogie-
8

Igen

Seemann · 2005. Nov. 16. (Sze), 13.28
elnagyoltam a probléma leírását. Bár, ha mindent precízen le tudnék írni, lehet hogy kérdeznem sem kellene. :-) PhpMyAdminnal és magyar nyelvű MySQL-Front-al nézve jól jelennek meg az ékezetek. Latin2 betükészletet próbáltam használni. A PHP oldalam iso-8859-2 re van állítva. Mindenből a tegnapelőtt letölthető legfrissebb verziót raktam fel. (Kivétel a MySQL-front) A MySQL 5.0.15-ös, ha jól emlékszem. (Most nem vagyok a fejlesztő gép közelében, elnézést) Az oldalon bizonyos ékezetes betűk helyett (talán ő és ű) kérdőjel jeleneik meg.
A phpMyAdmin egy hibaüzenettel jön fel, valami PHP ext könyvtárban lévő .dll fájl nem tartalmaz v.milyen karakterkészletet és ezért mittudomén mit csinál. Bocs, késő délután pontosan le tudom írni a hibaüzenetét. Arra is gondoltam, hogy esetleg a php.ini-ben kellene kutakodnom? Megpróbáltam, de eredménytelenül.
Kösz a segítséget!
10

most nalam is

Kelemen Zádor · 2006. Ápr. 14. (P), 16.04
Eddig nem volt gondom ezzel. Nemreg ujraraktam az egesz rendszert (WINXP / Apache 2.0.55 / PHP 5.1.2 / MySQL 5.0.18) es most nalam is ugyanez van. Mindent amit csak lehetett, UTF-8-ra allitottam, mert mindenfele nyelvvel kellene bajlodni. Az Apache-nal utf8, mysql-nel utf8 a default, de az adatbazis, a tablak, a tablak oszlopai, a fajljaim egytol-egyig utf8 kodolasuak, a php.ini-be is utf8 a def. char set. A html header-be is utf8 van beallitva.
A vegen ha a lekerdezesem elott azt mondom, hogy SET NAMES LATIN2; akkor jo, egyebkent meg az "ő" és az "ú" betuim kerdojelle valnak.
Nem igazan akarok mysql specifikus parancsokat alkalmazni, nincs erre valami ertelmesebb megoldas?
11

valami gebasz van ott

Hodicska Gergely · 2006. Ápr. 14. (P), 20.43
Példa kód, illetve rálátás a rendszerre hiányában csak annyit mondhatok Neked, hogy ennek pedig működni kéne így. Nem lehet, hogy valamiért mégiscsak latin2-es adatok vannak az adatbázisban? Ellenkező esetben pont a fenti parancsnak kéne elrontani a kimenetet.

Az biztos, hogy ha arra figyelsz, hogy a DB/tábla/mező utf8 legyen, PHP-ban kiadod a Content-Type header részeként a megfelelő charsetet, és csatlakozáskor mondasz egy SET NAMES utf8-at (ez utóbbi akkor kelhet, hogy ha a DB szerver defaultja nem utf8, de jó lehet annak kivédésre is, hogy az amúgy utf8-as DB-d átkerül egy ilyen szerverre): akkor nincs gond a karakterkódolással.

Arról hallottam már, hogy az IE hajlamos nem a charsetnek megfelelően visszapostolni az adatokat (mondjuk ez nem utf8 esetén olvastam), ha nem volt képes abban a charsetben ábrázolni a beírtakat (ahelyett, hogy HTML entitássá alakítaná): ez ellen lehet úgy véekezni, hogy beleteszel a formba egy rejtett _charset_ nevű változót, és FF valamint IE ilyenkor ebbe beállítja, hogy ténylegesen milyen kódolást is használt. Opera alatt pedig az accept-encoding (vagy valami hasonló nevű, még nem használtam) form attribútum használható ilyenkor, mert ha ezt kitöltöd, akkor az Opera (egyedüli böngészőként) ilyenkor megmondja, hogy a listából mit is választott.


Felhő
9

Szerintem...

Anonymous · 2005. Nov. 16. (Sze), 14.23
Ha minden helyen UTF8-at használsz...

Itt az a gond, hogy az a text file, amibe ezt a sort írtad, ANSI kódolású.
A: Vagy mentsd el a fájlt Notepad.exe-vel UTF8-ban (Save as... Encoding:)
B: Vagy így írd be az Ádám szót:
insert into tanulo (vezeteknev) value CONVERT("Ádám" using UTF8);

(de lehet, hogy csak a B fog menni)

Üdv
Zoli
12

server: 5.0.22 client: 5.0.11, Win XP

Anonymous · 2006. Aug. 15. (K), 13.59
A 1406-os hibaüzenet nálam is megjelent, bár nem INSERT-nél, hanem LOAD DATA INFILE-nál. Irányítószámokat akartam bevinni, de cirka 4000 rekordot nem akartam rögzíteni, tehát xls->csv, aztán átnevez txt-re, és mehet.
Aztán persze nem, mert állandóan ezt dobta vissza.
Alap kódolást átállítottam utf8-ra, tábla és mezők kódolása szintén utf8, ezután txt file mentés másként (utf8-ként), row format=fixed, pack keys=pack none (?), és még mindig kiírta, pedig első mező irsz volt, ami varchar(4) volt. Ezt átállítottam (150)-re, így megette...
Ezután MySQL Query Browserben select * from irsz és ott vannak az irányítószámok, és a városok.
13

megoldás!

krey · 2006. Okt. 1. (V), 16.13
A minap én is szembekerültem a problémával, a gond az, hogy nem utf8 szöveget próbál(t) bevinni pempe, előtte nyomni kell neki egy utf8_encode-ot. Sokat keresgéltem, amíg a prog.hu-n találtam választ, és gondoltam jobb, ha itt is szerepel.

üdv. krey

ps. imádok egyéves témákhoz hozzászólni :)
14

Oszlop típus

Lazlow · 2007. Aug. 23. (Cs), 09.54
Szia!

Hasonló volt a problémám, mint neked.
Röviden leírom: normál módon - a karakterkészlet beállítása nélkül - létrehoztam egy adatbázist. Mikor hosszú ékezetes betűket akartam a rekordokban felvinni az Incorrect string value:... kezdetű üzenetet kaptam.

Ahhoz, hogy jó legyen, minden érintett oszlopon módosítani kell a karakterkészletet a következő módon:

ALTER TABLE tablanev MODIFY oszlopnev VARCHAR(255) CHARACTER SET utf8;

Ha így nem működik, akkor két lépésben csináld:

ALTER TABLE tablanev MODIFY oszlopnev BINARY(255);
ALTER TABLE tablanev MODIFY oszlopnev VARCHAR(255) CHARACTER SET utf8;


Nekem bevált! (MySQL verzióm: 5.0.37)

Forrás, ahol a megoldást találtam: http://dev.mysql.com/tech-resources/articles/4.1/unicode.html
15

MSQL adatbázis

sziti50 · 2008. Jan. 11. (P), 13.32
Van a mondás, hogy "suszter maradjon a kaptafánál", de már nem akarom cserben hagyni az embereimet.
Volt egy verses oldalam az Extrán, de lassúnak találtam hát átmentem a fizetős Dataglobe-ra.Azóta az ő és ű betűk helyett kérdőjel jön.11 napja nem hajlandó senki foglalkozni velem a szolgáltatótól, még vissza se írnak.Már azt se bánnám, ha a régi adatok úgy maradnak(majd lenyelik valahogy)csak a frissen beküldöttek lennének jók.
Na, most jön a lényeg: 60 éves vagyok, fogalmam nincs ill. nem volt az adatbázishoz, angolul nem tudok, eddig minden ment flottul, most megpróbáltam visszavinni az adatbázist az extrára, ott meg aztán minden ékezetes betűre kérdőjel lett, pedig előtte jó volt.Ha új írást írok az viszont jól jelenik meg, de a régi adat így már nagyon csúnya.
Most rajtam csak úgy lehetne segíteni, ha megadnám a PHP és MSQL nevet és jelszót, amit meg is tennék, ha hajlandó lenne valaki segíteni nekem.Le vagyok százalékolva és ez az egyetlen szórakozásom, csak már nagyon panaszkodnak a tagok.
Azért ide írom, amit tudok:

Dataglobe-PHPmyAdmin:2.6.2
MSQL:4.1.22
Karakter:UTF8 Unicode
Egybevetés:utf8_general_ci
Tábla végén az összegzés:utf8_general_ci
Böngésző:iso-8859-2 (utf-8-al sem jó)

Próbáltam már az utf8_unicode_ci;latin2;latin1_swedish_ci;stb.
Beírtam ezeket:
$result = mysql_query("SET NAMES latin2;SET CHARACTER latin2");

Ezt válaszolta:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result = mysql_query("SET NAMES latin2;SET CHARACTER latin2"' at line 1

PHP-Fusiont használok Windows alatt

Természetesen az Extra-sok sem válaszolnak a levelemre.

Marad az, hogy valaki innen segít.
16

segítség

Hodicska Gergely · 2008. Jan. 12. (Szo), 01.14
Szólok az extrásoknak, hogy nézzék meg, ha esetleg nem tudnak segíteni, akkor segítek én, remélem nem történt még nem visszafordítható baj.


Üdv,
Felhő
17

segítség

sziti50 · 2008. Jan. 12. (Szo), 04.46
Köszönöm Gergely! Reménykedve várom.
Tibor
18

Segítség

puzzles · 2008. Jan. 14. (H), 14.33
Kedves Tibor!

Sajnos betegség miatt valóban csúszunk a felhasználói segítségnyújtást célzó levelekkel, de azért szeretném azt gondolni, hogy nem "természetes", hogy nem válaszolunk segítségkérő üzenetekre. Azonnal utánanézünk az említett levélnek és természetesen megpróbálunk mindent megtenni a probléma megoldásának érdekében.

Ormándi Zoltán
/Extra.hu/
19

Segítség

sziti50 · 2008. Jan. 14. (H), 15.56
Kedves Zoltán!

Értem a célzást és egyben megértem.Néha jó lenne tudni hány technikus dolgozik Önöknél és naponta mennyi e-mailt kapnak és szerintem akkor a segítségkérők is türelmesebbek lennének.Persze valószínűleg ezek nem nyilvános adatok.
Ugyanakkor köszönöm előre is a segítségét.

Üdvözlettel:Szilágyi Tibor
20

Segítség

puzzles · 2008. Jan. 14. (H), 18.57
Kedves Tibor!

Megtaláltuk levelét, így - konkrét e-mail cím ismeretében - azt hiszem jobb, ha nem a weblabort terheljük tovább ezzel a beszélgetéssel. Válaszunkat hamarosan meg fogja kapni.

Üdvözlettel,

Ormándi Zoltán
/Extra.hu/
21

Segítség

sziti50 · 2008. Jan. 15. (K), 14.20
Ezúton szeretném megköszönni Hodicska Gergelynek és Ormándi Zoltánnnak(Extra.hu) a honlapommal kapcsolatos problémák megoldásában felajánlott segítségét.Nemcsak szakmai, de emberi hozzáállásuk is dicsérendő.

Köszönettel:Szilágyi Tibor

http://napkorong.hu