This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!
Jedną z bardzo przydatnych funkcji języka SQL, szczególnie w dialekcie MySQL, jest możliwość umieszczenia wyrażenia regularnego w klauzuli WHERE, przez co można w bardzo wygodny sposób ograniczyć zbiór rekordów, na którym operuje dane zapytanie. Jest to bardzo przydatne w przypadku pól tekstowych, gdzie mamy bardzo ograniczone pole manewru w kwestii porównywania tego typu wartości. Nie każdy jednak wie, że operator REGEXP domyślnie nie uwzględnia wielkości liter porównywanych ciągów znaków. W niniejszym wpisie chciałbym przedstawić Wam krótką poradę dotyczącą naprawy tego niedociągnięcia.
Modyfikator BINARY. Aby zmusić operator REGEXP do porównywania pól tekstowych z uwzględnieniem wielkości liter, należy do zapytania wprowadzić modyfikator BINARY, a więc cały operator będzie brzmiał: REGEXP BINARY. Przykładowe zapytanie wykonane do bazy danych blogu:
|
|
Pomimo braku wpisów, w których tytułach użyłbym nazwy “SQL” pisanej małymi literami, zwróciło kilka rekordów zawierających ten fragment.
Zamieniamy je więc na następujące - dodajemy modyfikator BINARY:
|
|
I cieszymy się porównywaniem case-sensitive - zapytanie zgodnie z oczekiwaniami nie zwróciło żadnych rekordów.
Przykład ten być może jest mało “ciekawy”, z punktu widzenia kogoś szukającego gotowego zapytania do skopiowania, ale dobrze pokazuje ideę działania samego mechanizmu. Mam nadzieję, że taka krótka porada przyda Wam się w pracy, jako, że nie znalazłem w Internecie wielu źródeł, które w taki “szybki” i przystępny sposób opisywałyby powyższe “zjawisko”
Do zobaczenia w kolejnym wpisie!