[MySQL] Custom compare functie

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik heb een tabel met namen en ik wil kijken of een bepaalde naam al bestaat. Normaal wordt dit gedaan met een case-insensitive compare functie. Maar omdat het verschil tussen bijvoorbeeld O en 0 klein is, wil ik voorkomen dat beide namen worden geregistreerd.
Een optie is om een extra kolom toe te voegen met daarin de 'genormaliseerde' naam, dus alle 'O' vervangen door '0'.
Maar kan het ook simpeler, zonder extra kolom, door MySQL te 'vertellen' hoe de compare functie precies werkt?

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

SQL:
1
upcase(naam)
? :)

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 21-11 11:06

Macros

I'm watching...

Ook voor serveradmins is het moeilijk om de verschillen tussen o, O en 0 te zien :+)

"Beauty is the ultimate defence against complexity." David Gelernter


  • Johnny
  • Registratie: December 2001
  • Laatst online: 10:09

Johnny

ondergewaardeerde internetguru

Kijk eens naar de SOUNDEX() functie, die zoekt automatisch alles wat ongeveer hetzelfde lijkt of klinkt er bij: http://www.madirish.net/tech.php?section=4&article=85

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik heb het over het cijfer nul en de letter O. En het cijfer 1 en de letters l en I.

Verwijderd

SOUNDEX stamt uit de jaren 70 (zat volgens mij al in dBase 2 voor CP/M, zeker weten in dBase 3), is ontzettend onbetrouwbaar, en in dit geval onbruikbaar. 'Johan' en 'J0han' zullen 2 verschillende SOUNDEX resultaten opleveren.

Bovendien zit je dan nog aan een extra kolom vast, want een "WHERE SOUNDEX(naam) = SOUNDEX('Johan')" is niet te indexeren, en de database moet dan alle records langs.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Johnny schreef op zaterdag 23 december 2006 @ 20:25:
Kijk eens naar de SOUNDEX() functie, die zoekt automatisch alles wat ongeveer hetzelfde lijkt of klinkt er bij: http://www.madirish.net/tech.php?section=4&article=85
Die functie is weer iets te streng ('t' en 't333' zijn dan gelijk).
Verwijderd schreef op zaterdag 23 december 2006 @ 20:44:
SOUNDEX stamt uit de jaren 70 (zat volgens mij al in dBase 2 voor CP/M, zeker weten in dBase 3), is ontzettend onbetrouwbaar, en in dit geval onbruikbaar. 'Johan' en 'J0han' zullen 2 verschillende SOUNDEX resultaten opleveren.
Beiden J500 volgens MySQL 5.0.

[ Voor 35% gewijzigd door Olaf van der Spek op 23-12-2006 20:47 ]

Pagina: 1