BINARY
porównanie
z dwóch ciągów jest wymagane do dokładnego dopasowania
W normalnych warunkach końcowe białe znaki nie są uwzględniane w porównaniu, ale BINARY
operator wymusza, aby był:
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
Nawiasem mówiąc, problem z końcowymi białymi znakami ma wpływ nie tylko na porównania tylko z białymi znakami:
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...ale...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
...i jeszcze bardziej mylące, białe znaki to znaczące:
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
Jeśli chodzi o indeksowanie:
BINARY
zapobiegnie użyciu indeksu w kolumnie znaków. Jednak uwaga na temat dokumentacji
sugeruje, że indeks będzie być używane, jeśli BINARY
operator jest stosowany do strony porównania z literałem łańcuchowym, jak w:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '