このクエリを検討してください( DEMO IS HERE )
(SELECT * FROM `titles` where title = 'test\\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\\\')
出力:
| ID | TITLE |
--------------
| 1 | test\ |
| 1 | test\ |
(\)が(=)ではなく( like)追加\\が必要ですか? MySQLが(test \)を(test \\)その後、(test \\\\)を使用することはLIKEにとって論理的です。
テーブル情報:
CREATE TABLE IF NOT EXISTS `titles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `titles`
--
INSERT INTO `titles` (`id`, `title`) VALUES
(1, 'test\\');
\
は、デフォルトでLIKE
のエスケープ文字として機能します。
LIKE
の- manual から:
MySQLは文字列でCエスケープ構文(たとえば、改行文字を表す「\ n」)を使用するため、LIKE文字列で使用する「\」は2倍にする必要があります。たとえば、「\ n」を検索するには、「\\ n」と指定します。 「\」を検索するには、「\\\\」と指定します。これは、バックスラッシュが取り除かれるためですパーサーによって一度およびパターンマッチが行われるとき.
これを変更するには、次のように別のエスケープ文字を指定します。
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
実際、以前の回答はすべてどこかで破壊されています。爆発ピルによって重要なビットが再現されているKaroly Horvathが提供するリンクでわかるように、1つの円記号(\)を検索する正しい方法は、一度に4つの円記号(\\\\)を使用することです。
ところで、上記の1つのバックスラッシュを一度に表示するには2つを一度に使用し、4つを表示するには8つを使用する必要がありました。
LIKE
は2つのワイルド文字、%
および_
。
これらの文字を一致させるには、エスケープを使用できます:\%
、\_
。これは、\
、同様にエスケープする必要があります。
これはすべて manual で文書化されています。
テキストフィールド内で\
を見つけるには、\
を2回エスケープする必要がありました。そうでなければ、最後の%
が見つかりました。
SELECT * FROM `table` where `field` LIKE '%\\\%';