Porównywanie ciągów w SQL z uwzględnieniem wielkości liter
Czy zdarzyło się Wam wybierać wiersze z bazy MySQL, które różnią się od zadanego warunku wielkością znaków? Zapewne wielu początkujących programistów miało do czynienia z tą sytuacją. Przyczyną tego zjawiska jest ustalona metoda porównywania napisów, która z reguły nie uwzględnia wielkości liter (końcówka „ci” – case insensitive).

Mając przykładowo w bazie danych dwa rekordy gruszka oraz Gruszka, zapytanie pokroju:
SELECT * FROM `test` WHERE `data` = 'Gruszka'
…zwróci nam oba te rekordy. Co jeśli jednak zależy nam na porównaniu uwzględniającym wielkość liter?
Najprościej zmienić metodą porównywania napisów interesującej nas tabeli na taką z sufiksem „cs” – case sensitive. Załóżmy jednak że nie jesteśmy leniwi, nie chcemy zmieniać tego parametru, wybrane kodowanie znaków nie dysponuje odmianą case sensitive, lub po prostu chcemy zachować sposób porównywania a jedynie w jednym konkretnym przypadku uwzględnić wielkość liter.
W tej sytuacji musimy posłużyć się operatorem BINARY przy warunku porównania. Co robi ów magiczne słowo? Wymusza binarne porównywanie ciągów. Litera duża posiada inny zapis binarny niż mała (w końcu jakoś system musi je rozróżniać). W efekcie, nastąpi porównania ciągów z zachowanie wielkości liter.
SELECT * FROM `test` WHERE `data` = BINARY 'Gruszka'
Powyższe zapytanie zwróci już tylko jeden z naszych dwóch rekordów, ten który oczkujemy – Gruszka.
Analogicznie możemy zastosować operator BINARY do zapytania typu:
SELECT * FROM `test` WHERE `data` LIKE BINARY 'Gru%'