proč regulární výraz p[e|é|ě][s|š] při hledání ve sloupci databáze vrací nejen „peškova“ ale i „peřinova“?

zacatecnik27
Člen | 26
+
0
-

proč regulární výraz p[e|é|ě][s|š] při hledání ve sloupci databáze vrací nejen „peškova“ ale i „peřinova“ ?

nečekaný výsledek vrací jednoduchá podmínka ->where('ulice REGEXP ?','p[e|é|ě][s|š]') , zcela záměrně jsem nepoužil zápis p[eéě][sš] abych jednoznačně izoloval případné vícebytové sekvence a nevím co pro to víc ještě udělat.

Je jisté, že problém má příčinu ve zpracování vícebytového znaku UTF-8 kódování, první byte znaku ř a š je v utf-8 shodný, ale od toho je přece abstrakce, aby vyšší úrovně už mohly se znakem pracovat jako s jedním bez ohledu na jeho vnitřní vícebytovou reprezentaci :-) nevím si s tím rady, působí to na mne jako chyba. Veškeré PHP skripty píšu v UTF-8 kódování a veškeré tabulky databáze MySQL 5.7.19 mám v utf8_czech_ci. V konfiguračním souboru neon mám u databázového spojení uvedeno "dsn: 'mysql:host=127.0.0.1;dbname=****;charset=UTF8'" ale chová se to bohužel chybně ať už to tam to explicitní vyžádání kódování je nebo není …

Ještě jeden důležitý poznatek, když ve stejné konfiguraci jen použiji podmínku ->where(‚ulice ?‘, ‚peškova‘) tak vrátí správně jen tuto ulici a stejně tak pokud zavolám ->where(‚ulice ?‘, ‚peřinova‘) také vrátí úspěšně jen tuto ulici přesně podle očekávání, takže se v tomto případě chová naprosto správně, ten problém nastává jen při použití REGEXP …

Děkuji za radu jak tohle vyřešit.

Pokud Vás napadá zcela odlišný způsob kromě výše uvedeného REGEXP v dotazu jak při vyhledávání vyjít vstříc uživatelům, kteří diakritiku nepoužívají ? Pokračujte prosím tudy. I za takový tip budu velmi vděčný.

Editoval zacatecnik27 (21. 9. 2017 9:35)