Ékezetes rendezés MySQL-ben

Hosszú idő óta tologatjuk a probléma megoldását, rendezzünk a magyar szabályok szerint mysql-ben: ismerje az ékezetes karaktereket, tudja a kétbetűsöket is: ly, ty, ny…, és ne legyen probléma a kis és nagybetű.

Legyen rá egy tárolt függvény: bármikor használható.

Ez lett a megfejtés(figyeljünk a charset-re):

CREATE DEFINER=`root`@`localhost` FUNCTION `orderer`(s varCHAR(255)) RETURNS varchar(255) CHARSET utf8
RETURN upper(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(replace(s,'á','azz')
,'í','izz'),'cs','czz'),'ly','lzz'),'é','ezz')
,'ó','oxx')
,'ö','oyy')
,'ő','ozz')
,'ty','tzz')
,'gy','gzz')
,'ú','uxx')
,'ü','uyy')
,'ű','uzz')
,'ny','nzz')
,'zs','zzz'))

Használat:

select * from tabla order by orderer(mezo) asc

Úgy tűnik működik. De talán már tudja a mysql is. Majd utánanézünk. :)

8 hozzászólás

  1. cett, 2008. február 21., 12:02

    Ügyes!

     
  2. Pro, 2008. február 21., 12:34

    nem lesz ez így lassú a full table scan miatt?

     
  3. cadmagician, 2008. február 21., 12:37

    hát olyan, hogy kell, nem kell. valamért valami. hát biztos lassabb, de most egy nemtom 20-30 betűs varcharnál nem kritikus szerintem.

     
  4. maat, 2008. február 22., 16:51

    De akár be is állíthatod a tábla egybevetését magyarra, és az legalább a könyvtári betűrendhez közel van. Mert a tied az nem tudom, milyen, de szerintem sem a könyvtárinak, sem az mhszben definiáltnak nem felel meg.

     
  5. cadmagician, 2008. február 22., 20:07

    hát ha magyar az egybevetés, akkor azt tapasztaltam, eljátszadoztam vele:
    á=a ; A= a

    nem tudsz különbséget tenni.

    ezért minden utf8_bin, és ha kveri van, és nem kell különbség, használom a collate-t, és így jó.

     
  6. maat, 2008. február 22., 23:14

    Kipróbáltam az utf8_hungariant az mhsz példáival. Alapvetően jó, hibákat a hagyományos írásmódnál (”Kiss Ernő” szabály szerint előbb van, mint “Kis József”), a szóközöknél (hibásan figyelembe vette) és a kétjegyű betűknél találtam. Kis- és nagybetűt, ékezeteket jól kezeli.

     
  7. cadmagician, 2008. február 23., 12:29

    köszi, megnézzük.

     
  8. sarki_roka, 2008. február 23., 17:54

    ugye tudjátok hogy 44 betűs az abc-nk? bár gondolom nem nagy kunszt beleirni a méltánytalanul elfeledett “dz” és “dzs” betűket sem. az igazán nagy dobás akkor lenne hogy felismerné pl az olyan helyzetet mint a “vizszintes” szónál. másik - bár magyar szavakra nem jellemző, bár lehet hogy lehetne találni ilyet - szóval ahogy igy ránézésre értem, úgy úgy tűnik hogy hibás eredményt ad erre a két szóra: nagzzb - nagya. az elsőnek előrébb lenne a helye mint a másdiknak.
    na, mindenesetre ügyes próbálkozás :)

     

Új hozzászólás: