Ein BINARY
Vergleich
der beiden Zeichenfolgen ist für eine exakte Übereinstimmung erforderlich
Im Normalfall werden abschließende Leerzeichen beim Vergleich nicht berücksichtigt, sondern der BINARY
Operator zwingt es zu:
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
Übrigens sind nicht nur reine Whitespace-Vergleiche von dem Problem mit nachgestellten Whitespaces betroffen:
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...aber...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
...und noch verwirrender ist, dass führendes Leerzeichen ist signifikant:
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
Zur Indexierung:
BINARY
verhindert, dass ein Index für die Zeichenspalte verwendet wird. Allerdings eine Anmerkung zur Dokumentation
legt nahe, dass der Index wird verwendet werden, wenn die BINARY
Der Operator wird wie in:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '