完全に一致させるには、2つの文字列をBINARY
比較する必要があります
通常の状況では、末尾の空白は比較では考慮されませんが、BINARY
オペレーターはそれを次のように強制します。
BINARYを使用すると、末尾のスペースも重要になります。
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
ちなみに、末尾の空白の問題の影響を受けるのは、空白だけの比較ではありません。
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...しかし...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
...さらに紛らわしいことに、先頭の空白は重要です。
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
索引付けについて:
BINARY
文字列でインデックスが使用されないようにします。ただし、ドキュメントのメモでは、次のように、比較の文字列リテラル側に演算子が適用された場合にインデックスが使用されることが示されています。BINARY
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '