Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
?HTML-ben a Flash átméretezés torzul
Eredeti mezőnevek lekérdezése
?Input mezőből visszakapott adat probléma
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Miért ad találatot a mysql

»

Miért ad találatot a mysql

nyitotta: dgyula, idő: 2010.03.15., moderátor: Árnyék
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Adatbázisok » MySQL
Programozási nyelvek » SQL

Sorrend:
Időzóna:
Blokkméret:
Sziasztok!

Van egy szövegem egy rekordban amit így kérdezek le:

SELECT * from tartalom WHERE activ = '1' and upper(tartalom) like upper('%asa%');

Ezt php-ban teszem. És erre a szövegre találatot ad, pedig nem is tartalmazza ezt a karakter láncot! Miért? Gondolom az ékezetet nem veszi figyelembe. Hogy lehet rávenni, hogy figyelembe vegye?

kialakítását
Próbáld meg 'binary' kulcsszóval:

SELECT * from tartalom WHERE activ = '1' and upper(tartalom) like binary upper('%asa%');
Sajnos nem jó. Így ui. meg nem lehet keresni az ékezetes szavakra.
Egy próbát megérhet:
SELECT * from tartalom WHERE activ = '1' and upper(tartalom) like upper('%asa%') COLLATE utf8_bin;
Sajnos ez sem jó ez nem is jó a mysql szerint szintatktikailag.
És mit ír ki hibának? Mert nálam semmit. Működik. UPPER('%asa%') nem ad eremdényt, UPPER('%ásá%') kidobja a 'kialakítását' szót.
UTF-8-as tábla, utf8_general_ci collation-nel. MySQL 5.1.41-community verzió.
Nálam ezt írja ki:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /html/index.php on line 99

De nekem ez nem mond semmit.

Nálam 5.0.32 a verziója. Debianon.
A megoldás a binary, ahogy azt Frostech0 is írta kapásból, vagy pedig megfelelő collation használata, ahogy vision2003 írta. Gyakorlatilag a 2 megoldás ugyan azon az elgondoláson alapul: a karakterek byte értékének (bináris megfelelőjének) összehasonlításán.

Hogy melyik megoldás a jobb? Az attól függ, hogy rendszeresen szükséged van-e a bináris összehasonlításra a lekérdezésekben. Ha igen, akkor használd a collation-t, ha nem, akkor használd a binary kifejezést. De ha collation-t használsz, akkor alapból állítsad át erre az adott mezőt és ne az sql-ben kényszerítsed ki a collation váltást, mert az nagyon költséges művelet!

Ha a binary like-kal nem tudsz ékezetes karakterre keresni, akkor elhibáztad a karakter kódolást. Frostech0 megoldása tökéletes.
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /html/index.php on line 99

Hibakeresés kezdőknek: ha mysql_connect, mysql_select_db(), mysql_query() utasítások false-zal térnek vissza, akkor a mysql_error() értékét ki kell iratnod, különben nem fogod látni a mysql által visszaadott hibát. Ahogy itt sem látod.
Kiírattam és ezt mondja:

Lekérdezési hiba: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin2'
Nem adtál ki váletlenül valahol egy set names 'latin2'-t php-ból (vagy egyéb karakter készletet beállító utasítást)? Vagy netán nem nézted el a tábla kódolását? Mert a hibaüzenet szerint a rendezés (collation) és a karakter készlet kódolása nem egyezik meg. Tüneti kezelésként cast()-tal el lehet tüntetni a hibát, de inkább az okot kéne megkeresni. Ebben viszont nem tudunk segíteni a jelenleg megadott infók alapján. Mindenképpen tanuld meg a karakterkészletek kezelését, mert enélkül nagyon nehéz dolgod lesz!
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Hack100
»Riha60
»Akhiles50
»mrchandra50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen