私はこのMySQLの動作を理解していません:a \ bを表示したい場合は、"a\\b"
問題なく動作するものを選択できます:
mysql> select "a\\b";
+-----+
| a\b |
+-----+
| a\b |
+-----+
1 row in set (0.05 sec)
しかし、LIKEを使用してテーブル内の\を含む文字列を検索したい場合は、「\」をダブルエスケープする必要があります。なんで ?
これが例です。
小さなテーブルを用意します。
create table test ( test varchar(255) );
insert into test values ( "a\\b" ) , ( "a\\b\\c" ) , ( "abcd" );
mysql> select * from test;
+-------+
| test |
+-------+
| a\b |
| a\b\c |
| abcd |
+-------+
3 rows in set (0.05 sec)
「a\b」で始まるエントリを取得しようとします...
mysql> select * from test where test LIKE "a\\b%";
+------+
| test |
+------+
| abcd |
+------+
1 row in set (0.05 sec)
なぜ\\
そこで無視されるのですか?期待される結果を得るために、なぜbasckslashをダブルエスケープする必要があるのですか?
mysql> select * from test where test LIKE "a\\\\b%";
+-------+
| test |
+-------+
| a\b |
| a\b\c |
+-------+
2 rows in set (0.04 sec)