![]() |
![]() ![]() |
![]() |
![]()
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%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 25.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Fajny sposób ale co w przypadku kiedy chce wyszukać sześcioliterowe słowo gdzie wiem, że:
pierwsza litera to 'k' trzecia to 'a' i szósta to 'ć' [k].[a]..[ć] (kłamać) |
|
|
![]()
Post
#4
|
|
![]() 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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.05.2025 - 11:40 |