A BINARY
comparison of the two strings is required for an exact match
Under normal circumstances, trailing whitespace is not regarded in the comparison, but the BINARY
operator forces it to be:
BINARY also causes trailing spaces to be significant.
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
Incidentally, it isn't just whitespace-only comparisons that are affected by the trailing whitespace issue:
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...but...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
...and even more confusingly, leading whitespace is significant:
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
Regarding indexing:
BINARY
will prevent an index from being used on the character column. However, a note on the docs suggests that the index will be used if the BINARY
operator is applied to the string literal side of the comparison as in:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…