[MySQL] negeert selectief accenten

Pagina: 1
Acties:

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Ik heb een tabel met daarin woorden met accenten.
Door te zoeken op een woord als ampere wil ik de correcte schrijfwijze ampère vinden.
Voor sommige woorden blijkt dit echter niet te werken.

Na een aantal tests blijkt dat woorden waarin de letters ö, ä en ü voorkomen niet worden gevonden.
Zoeken naar 'beinvloeden' levert 'beïnvloeden' op, zoeken naar 'cooperatie' levert geen 'coöperatie' op terwijl zoeken op 'coöperatie' wel werkt.

Iemand een idee hoe ik dit op kan lossen?

Developer Accused Of Unreadable Code Refuses To Comment


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je zou regular expressions voor dat soort dingen kunnen opbouwen, voordeel is dat je ook gelijk foutjes met c's en k's kan voorkomen:
cooperatie wordt dan [ck][oö...][oö...]per[aä]tie ofzo.

Groot nadeel is dat het een flinke performance hit kan zijn als je tabel vrij groot is.

Verwijderd

MySQL vervangt bij zoekopdrachten letters met accenten door het overeenkomstige teken volgens een tabel die hoort bij de ingestelde character set.
Als je tabel als attribuut BINARY heeft, gebeurt dat niet (dan is 'hé' iets anders dan 'he').
Kijk eens in de MySQL documentatie naar zaken als character set, collate, binary, etc. Controleer de default character set zoals die is ingesteld en kijk of je daar wellicht deze effecten mee kunt verklaren.
Ik kan me zo indenken dat er een set is gebruikt, waar enkele accentletters wel vervangen worden door het accentloze lettertje en andere niet (of door onverwachte andere letters).

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Je zou regular expressions voor dat soort dingen kunnen opbouwen, voordeel is dat je ook gelijk foutjes met c's en k's kan voorkomen:
cooperatie wordt dan [ck][oö...][oö...]per[aä]tie ofzo.

Groot nadeel is dat het een flinke performance hit kan zijn als je tabel vrij groot is.
Dat zou inderdaad ook een mogelijkheid zijn. De tabel bestaat uit slechts 2100 rijen.
MySQL vervangt bij zoekopdrachten letters met accenten door het overeenkomstige teken volgens een tabel die hoort bij de ingestelde character set.
Als je tabel als attribuut BINARY heeft, gebeurt dat niet (dan is 'hé' iets anders dan 'he').
Ik weet dat MySQL accenten vervangt door andere karakters; ik hoopte daar in dit geval ook gebruik van te kunnen maken.
Kijk eens in de MySQL documentatie naar zaken als character set, collate, binary, etc.
COLLATE en BINARY worden niet herkent door MySQL.
Zijn deze keywords pas vanaf een bepaalde versie te gebruiken? (gebruik 3.23.58).
Controleer de default character set zoals die is ingesteld en kijk of je daar wellicht deze effecten mee kunt verklaren.
Ik kan me zo indenken dat er een set is gebruikt, waar enkele accentletters wel vervangen worden door het accentloze lettertje en andere niet (of door onverwachte andere letters).
Deze standaard set is latin1.
Een SELECT 'o'='ö' levert 0 op; SELECT ']'='ö' geeft 1.

Ik heb de .conf bestanden in de share/charsets directory doorgelezen en denk dat ik german1 als karakterset moet gebruiken.
Het veranderen van de karakterset d.m.v. ALTER TABLE geeft echter een foutmelding.
Is dit überhaupt mogelijk met MySQL 3.2x?

Developer Accused Of Unreadable Code Refuses To Comment


  • Icelus
  • Registratie: Januari 2004
  • Niet online
ALTER TABLE tabel CHARACTER SET german1
geeft een foutmelding: You have an error in your SQL syntax near 'CHARACTER SET german1'.

Is het mogelijk om de karakterset in MySQL 3.23 op te geven bij het maken van een tabel, te wijzigen of aan te geven bij een SELECT; of kan dit alleen met MySQL 4?

Developer Accused Of Unreadable Code Refuses To Comment