Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia regularne a polskie znaki diakrytyczne
molek
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.03.2011

Ostrzeżenie: (0%)
-----


Witam

Posiadam baze, która w tabeli haslo przechowuje kilkadziesiąt tysięcy słów.
Tabela haslo składa się z trzech kolumn:
id
slowo
dlugosc_slowa

Z wykorzystaniem wyrażeń regularnych chciałbym np. wyszukać losowe czteroliterowe słowo zaczynające się na literę 'l'
robię to za pomocą zapytania:

Kod
SELECT * FROM haslo
WHERE slowo REGEXP '[l]...$' and dlugosc_slowa = 4 ORDER BY RAND( ) LIMIT 1


Zapytanie zwraca poprawne rezultaty (np. lada, list) dopóki nie napotka na polskie znaki,
jeśli w sprawdzanym słowie napotka na polski ogonek to potrafi zwrócić np. zlać lub pląs - wyrazy czteroliterowe ale nie zaczynające się na litere 'l'

kodowanie utf8
metoda porównywania napisów to utf8_polish_ci

Jak sobie z tym poradzić?
Z góry dziękuje za pomoc.


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przy pomocy SUBSTRING() możesz wyciąć sobie pojedynczy znak z tekstu i go porównać (czyli w tym przypadku konieczne byłoby trzykrotne wykorzystanie tej funkcji). W dodatku funkcja ta jest multi-byte safe czyli nie będzie problemu z UTF-8.

Problemem REGEXP jest to:
Cytat
Warning

The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 15:15