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. |
|
|
|
![]() |
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. |
|
|
|
molek Wyrażenia regularne a polskie znaki diakrytyczne 25.03.2011, 13:33:52
Crozin A po co Ci wyrażenia regularne tutaj w ogóle?[SQL]... 25.03.2011, 13:39:23
molek Fajny sposób ale co w przypadku kiedy chce wyszuka... 25.03.2011, 14:10:12
kitol Spróbuj również:
[SQL] pobierz, plaintext SELECT .... 29.03.2011, 09:57:23 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 17:54 |