A BINARY
srovnání
z těchto dvou řetězců je vyžadována pro přesnou shodu
Za normálních okolností se při porovnávání neberou v úvahu mezery na konci, ale BINARY
operátor vynutí, aby to bylo:
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
Problémem s mezerami na konci nejsou mimochodem ovlivněna pouze srovnání obsahující pouze bílé znaky:
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...ale...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
...a ještě více matoucí je, že vedoucí mezery je významné:
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
Ohledně indexování:
BINARY
zabrání použití indexu ve sloupci znaků. Nicméně poznámka k dokumentům
naznačuje, že index bude použít, pokud je BINARY
operátor se použije na stranu řetězcového doslovu srovnání jako v:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '