mysql ékezetek

mysql ékezetek

Hozzászólások

Sziasztok!

Olyan problémám van MySQL 4.1-el, hogy adott egy lekérdezés pl.:
SELECT `nev` from `db`.`tabla` where `nev`='géza';

Erre az sql kidobja nekem geza -t is, meg géza -t is. Tehát valamiért a hosszú ú az eqvivalens a rövid u val.
Mielott valaki lamazna es megkövezne, a table latin2, a collate pedig latin2_hungarian_ci, a nev mezo szinten latin2 es ugyanaz a collate.

Mi lehet a probléma?

Üdv.

Nekem e1 olyan problémám van, mikor létrehozom a kapcsolatot,egyeltalán nem nem lehet ékezeteket írni,csak bippel egyfolytába.A fenntiek alapján sem tudom a cliens oldalon rábirni, h magyar ékezetek jelenjenek meg.
Köszönöm a segítséget!

[quote:d8e4d2fe60="djsmiley"]Sziasztok!

Olyan problémám van MySQL 4.1-el, hogy adott egy lekérdezés pl.:
SELECT `nev` from `db`.`tabla` where `nev`='géza';

Erre az sql kidobja nekem geza -t is, meg géza -t is. Tehát valamiért a hosszú ú az eqvivalens a rövid u val.
Mielott valaki lamazna es megkövezne, a table latin2, a collate pedig latin2_hungarian_ci, a nev mezo szinten latin2 es ugyanaz a collate.

Mi lehet a probléma?

Üdv.

Nem tudom jó-e neked, de próbáld ki a:
where binary nev='géza'
opciót. Ekkor a kis és nagybatű különbözőnek számít..

a myqsl rész meggyógyult... de ha utf-8 ra állítom a headert, akkor a forráskódban elhelyezett többi ékezetes karakter helyére ? rak... lehet, hogy egy frissebb php segítene?

[quote:1dc69dcbcc="adathalmaz"]a myqsl rész meggyógyult... de ha utf-8 ra állítom a headert, akkor a forráskódban elhelyezett többi ékezetes karakter helyére ? rak... lehet, hogy egy frissebb php segítene?

gondolom mert a forrás nem utf-8ban van...

[quote:11a5809ca3="adathalmaz"]de ha utf-8 ra állítom a headert, akkor a forráskódban elhelyezett többi ékezetes karakter helyére ? rak...

a forrast valszeg nem utf-8-ban irtad

[quote:11a5809ca3="adathalmaz"]lehet, hogy egy frissebb php segítene?

nem

ez viszont erdekes lehet szamodra:
http://www.php.net/manual/en/ref.mbstring.php

Na, leszek olyan jo es picit upolom a temat :)
Eredeti problema meg mindig megvan, ami egyel feljebb le van irva. Senki nem talalkozott meg hasonloval. Tehat a mysql lekerdezeskor a geza-ra kiadja géza -t.

Erre keresek ingen intenzíven valami gyógyírt.

Thx mégegyszer.

A collate a bunos. Collate az, ami megmondja, hogy 2 karaktert osszehasonlitva mi lesz az eredmeny. Eszerint van
- binary: ket karakter akkor egyenlo, ha byte-re ugyanazok, pl latin2_bin
- nem binary: bizonyos egyezosegek lehetnek, latin2_hungarian_ci esetn pl é és e egyenlo.

Ha tudod valtoztatni a tablakat, akkor jobban jarsz, ha az adott tabla / adatbazis default collation-jat megvaltoztatod binarisra.

Ha nem tudsz valtoztatni a tablakon, akkor a csunyabb megoldas az, hogy query-kent megadod a COLLATE-t.

[code:1:3180ea2e71]
mysql> select _latin2'geza' = _latin2'géza' collate latin2_hungarian_ci;
+-----------------------------------------------------------+
| _latin2'geza' = _latin2'géza' collate latin2_hungarian_ci |
+-----------------------------------------------------------+
| 1 |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select _latin2'geza' = _latin2'géza' collate latin2_bin;
+--------------------------------------------------+
| _latin2'geza' = _latin2'géza' collate latin2_bin |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+
1 row in set (0.00 sec)
[/code:1:3180ea2e71]

Szia!

Errol a latin2_bin -rol nem tudtam. Ezer koszonet a segitsegert.

Udv.

tovább görgetve a problémát...
ha jól láttam, úgy lesz utf-8 a kódóm, hogy az ékezetes karaktereket helyetesítem &xxxx-el... van erre valami más megoldás is?
síma html-ben ok
php echo-jával nem jeleníti meg....

[quote:daff8e5e5f="adathalmaz"]tovább görgetve a problémát...
ha jól láttam, úgy lesz utf-8 a kódóm, hogy az ékezetes karaktereket helyetesítem &xxxx-el... van erre valami más megoldás is?
síma html-ben ok
php echo-jával nem jeleníti meg....

\&xxxx ???

[quote:455d952b03="adathalmaz"]pl ő=&#0337

\&#0337 ??? Igy nem muxik?
^
^
^

[quote:973681c409="Oregon"]

\&#0337 ??? Igy nem muxik?
^
^
^

a html kód rendesen megjeleníti, de php-ban echo-ban történő kiíratásnál nem ír ki semmit... illetve, ezek szerint át kellene nyálazni az ékezetes karakterekhez tartozó kódókat... vagy még mindig nem jól látom?
milyen szerkesztőt ajánlatok?
a hapedit ezek szerint nem utf barát...

[code:1:8167598992]
<?php
header('Content-Type: text/html; charset=utf-8');
echo('&#0337');
?>
[/code:1:8167598992]

nekem ez egy hosszu o"-t mutat

Most tesztelem a migraciot 4.0-rol 4.1.10a-ra

alapbol azt mondja a "collaction | egybevetes", hogy latin1_swedish_ci
ha igy hagyom akkor minden oke, de ha atrakom latin2_hungarian_ci akkor a hosszu őű helyett egy kerdőjel lesz. (nem csak a regi adatoknal, hanem az ujonnan felvitteknel is)

Más is találkozott már ezzel a problémával?
Mit javasoltok?
Tom: mostantol hasznaljam a latin1 sved kodtablat? :)

[quote:17cdac27b9="Oregon"]a hosszu őű helyett egy kerdőjel lesz. (nem csak a regi adatoknal, hanem az ujonnan felvitteknel is)

az adatfelvitel milyen kornyezetbol tortenik?

[quote:8d18bc69fa="snq-"][quote:8d18bc69fa="Oregon"]a hosszu őű helyett egy kerdőjel lesz. (nem csak a regi adatoknal, hanem az ujonnan felvitteknel is)

az adatfelvitel milyen kornyezetbol tortenik?

vagy a phpmyadmin (utf8|8859-2) vagy sajat feluletrol ami 8859-2 mind a ket esetben ugyanazt csinalja.

igen... ha csak így szimplán beírom, akkor tényleg ok...
csak most már az a kérdésem, hogy pontosan hova tegyem a headert, hogy normálisan működjön...
az oldal keverve van php, html ellemekkel... illetve a html tag előtt van egy adag php kód, meg némi include...

Szoval kis gyorstalpalo 4.1-bol:

Meg lehet adni minden mezonek kulon karakter kodolast. Ha nincs megadva, akkor default table / db / server-t vesz. Ezt meg lehet nezni a show create database paranccsal. Ez a tarolas resze.

Lekerdezes / feltoltes-nel a 'set names latin2' pl megadja, hogy amit te kuldesz, az latin2 lesz, amit te kapsz, az is.

Bovebben: http://dev.mysql.com/doc/mysql/en/charset.html

SZVSZ problema ott lehet, hogy 4.0 alatt latin1 a server, ebbe te beleteszel latin2-es őŐűŰ-t, ami latin1 alatt nem teljesen az.

[quote:0b5c84be8c="adathalmaz"]hogy pontosan hova tegyem a headert, hogy normálisan működjön...

headert akkor kell dobni, amikor meg biztosan nem hasznaltal outputot generalo php kodot, illetve html-t sem irtal (meg egy soremelest sem)

[quote:dba20f4886="lukit"]Lekerdezes / feltoltes-nel a 'set names latin2' pl megadja, hogy amit te kuldesz, az latin2 lesz, amit te kapsz, az is.

finomhangolas set names helyett:
set character_set_client = x;
set character_set_results = x;
set character_set_connection = x;

bocsi, ha volt már...
apache 1.3.22+php4.3.3+mysql4.1.7
ha lekérek egy oldalt, az ékezetes betük helyet más karaktereket jelenít meg...
ha phpmyadmin-ban nézem meg a cellák tartalmát, akkor minden rendben van...
pl
Ĺ�ÊåúŹÜßóĂ=őéáúűöüóí
nézegettem a nyelvi beállítást, szerintem jó... ahz oldal elején is megadom, hogy milyen karaktereket használ...
3.x alatt nem volt ilyen problémám...
a google-n sem találtam semmi értelmeset..
előre is köszönöm..

[quote:db65728790="lukit"]Szoval kis gyorstalpalo 4.1-bol:

Meg lehet adni minden mezonek kulon karakter kodolast. Ha nincs megadva, akkor default table / db / server-t vesz. Ezt meg lehet nezni a show create database paranccsal. Ez a tarolas resze.

Lekerdezes / feltoltes-nel a 'set names latin2' pl megadja, hogy amit te kuldesz, az latin2 lesz, amit te kapsz, az is.

Bovebben: http://dev.mysql.com/doc/mysql/en/charset.html

SZVSZ problema ott lehet, hogy 4.0 alatt latin1 a server, ebbe te beleteszel latin2-es őŐűŰ-t, ami latin1 alatt nem teljesen az.

Koszi szepen. mar latom mi okzta ezt az alapotot.
A kovetkezo van hatra: latin1 atformazasa latin2-re.
Erre tudsz valami jo megoldast?

Ha jól látom, ez UTF-8-as adat. Az apache-nak valszeg van alapértelmezett charset-je és az nem utf-8. Vagy szedd ki, hogy ne küldje ezt az infot a http header-ben vagy állítsd át utf-8-ra (AddDefaultCharset utf-8).

Laci

oke, ezt angol tudas nelkul is megertettem.
koszi szepen.

csak, hogy ne feljtsetek el...
ha beállítom a headert utf-8ra, akkor a mysql-ből kivet adatok jól jelennek meg, a forráskódba beírt ékezetek viszont nem...
ha mást adok meg a header-ben (charset=windows-1250,charset=ISO-8859-2) , akkor pont fordítva...
lehet, hogy ez már php beállítási gond...
ja, és a mysql-ben a mezők utf-8 ra vannak állítva...

[quote:e1397cfd4a="adathalmaz"]csak, hogy ne feljtsetek el...
ha beállítom a headert utf-8ra, akkor a mysql-ből kivet adatok jól jelennek meg, a forráskódba beírt ékezetek viszont nem...
ha mást adok meg a header-ben (charset=windows-1250,charset=ISO-8859-2) , akkor pont fordítva...
lehet, hogy ez már php beállítási gond...

Ok: nem egyezik a mysql-bol nyert adatok kodolasa a html-ek kodolasaval.

Megoldas1:
probald meg az sql kapcsolat felepitese utan ezt:
SET character_set_results = latin2
es aztan headerben charsetnek iso-8859-2

Megoldas2:
a html-t atkonvertalod latin2-rol utf8-ra es header-ben ezt adod meg

Megoldas3:
az SQL mezoket atkonvertalod latin2-re es ezt hasznalod header-ben is, erre linket 1-2 hozzaszolassal fentebb

PHP kodod tartalmazzon ilyeneket:
[code:1:845d136612]
[..]
header("Content-Type: text/html; charset=utf-8");
[..]
[..]mysql_connect[..]
mysql_query('SET NAMES utf8');
[/code:1:845d136612]
innentol mar jonak kell lennie ekezeteknek. Apache-ban celszeru kikapcsolni default charsetet, hiszen php-ban ugyis definialod...