Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Speciale karakters negeren met selecteren

Pagina: 1
Acties:

  • aximus
  • Registratie: September 2004
  • Laatst online: 23-11 09:27
Beste tweakers, ik heb een probleem waar ik niet uit kom.

Ik heb een MySQL tabel met allemaal categoriën. Als ik de volgende query uitvoer:
Select * from cats where description like 'cafe%'
Krijg ik als resultaat:
Cafetarias

Maar ik heb ook een record: 'Cafés'.

Omdat daar een streeptje op de 'e' staat wordt deze niet geselecteerd. Ik heb geen idee hoe ik het op moet lossen. Door een andere characterset in te stellen voor de tabel kwam ik niets verder. En ook met de COLLATE clausule kwam ik er niet uit. Wie helpt mij verder?

Nee


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als het goed is kan je dat wel met een collation oplossen. Maar ik heb het zelf verder nooit echt in de praktijk gebruikt, alleen gelezen in een MySQL-boek. Je moet dan iig een collation van een taal hebben waarbij die e-accent bestaat.

  • Mathijs1
  • Registratie: Oktober 2002
  • Niet online
maar cafe% is niet LIKE café, dan moet je caf% doen. In geen enkele collation of characterset geldt e==é.

  • aximus
  • Registratie: September 2004
  • Laatst online: 23-11 09:27
Mathijs1 schreef op donderdag 27 september 2007 @ 12:16:
maar cafe% is niet LIKE café, dan moet je caf% doen. In geen enkele collation of characterset geldt e==é.
Maar ik werk met een AJAX autocomplete functie. Als iemand op 'Cafe' zoekt moet er wel netjes 'Café' als resultaat komen en niet de melding dat er geen resultaten zijn....

Als dit daadwerkelijk niet mogelijk is in MySQL zal ik meerdere queries uit moeten gaan voeren. Eentje voor 'e' en eentje voor 'é'. Niet de mooiste oplossing natuurlijk.

Bedankt voor de info iig!

Nee


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Mathijs1 schreef op donderdag 27 september 2007 @ 12:16:
maar cafe% is niet LIKE café, dan moet je caf% doen. In geen enkele collation of characterset geldt e==é.
Sorry, maar dit is dus niet waar. Dankzij collations kan je juist wel op beide matchen. Als alle char sets/collations goed staan, werkt dit gewoon met mysql.

{signature}


  • aximus
  • Registratie: September 2004
  • Laatst online: 23-11 09:27
Ik heb het opgelost met de handleiding van MySQL: http://dev.mysql.com/doc/refman/5.0/en/charset.html

Voor de geïnteresseerde:

De characterset van de tabel heb ik op: latin1 -- cp1252 West European gezet.

De query voer ik als volgt uit:
SELECT * FROM trefwoord WHERE description LIKE _latin1 'cafe%' COLLATE latin1_swedish_ci
(let dus op de toevoeging '_latin1' en 'COLLATE latin1_swedisch_ci')

Als resultaat krijg ik dan Café en Cafetaria's.

Nee


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Voutloos schreef op donderdag 27 september 2007 @ 15:23:
[...]
Sorry, maar dit is dus niet waar. Dankzij collations kan je juist wel op beide matchen. Als alle char sets/collations goed staan, werkt dit gewoon met mysql.
En dat komt omdat karakters in unicode zowel voorkomen als enkele code, als als een combinatie van karaktercodes.

Wie trösten wir uns, die Mörder aller Mörder?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dat is niet geheel waarom het werkt. Dankzij collation weet mysql gewoon hoe er vergeleken en gesorteerd moet worden. Het zijn gewoon stomme mappings.

{signature}

Pagina: 1