Hoe zoek ik naar schuine streep (\) in MySQL? en waarom is escapen (\) niet vereist voor waar (=) maar voor Like is vereist?

Overweeg deze QUERY (DEMO IS HIER)

(SELECT * FROM `titles` where title = 'test\\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\\\')

Uitvoer:

| ID | TITLE |
--------------
|  1 | test\ |
|  1 | test\ |

VRAAG:

Waarom is er geen extra (\)vereist voor (=)maar voor (zoals) is extra \\vereist?
Het is duidelijk dat MySQL ontsnapt aan de (test\)met (test\\)en vervolgens (test\\\\)is logisch voor LIKE .

Tabelinformatie:

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\\');

Antwoord 1, autoriteit 100%

\functioneert standaard als een escape-teken in LIKE.

Van de handleidingvoor LIKE:

Omdat MySQL de C-escape-syntaxis in tekenreeksen gebruikt (bijvoorbeeld “\n” om een ​​teken voor een nieuwe regel weer te geven), moet u elke “\” die u in LIKE-tekenreeksen gebruikt, verdubbelen. Als u bijvoorbeeld naar “\n” wilt zoeken, geeft u dit op als “\\n”. Om te zoeken naar “\”, specificeert u het als “\\\\”; dit komt omdat de backslashes eenmaal door de parseren opnieuw wanneer de patroonovereenkomst is gemaaktworden verwijderd, waardoor er een enkele backslash overblijft om te vergelijken.

U kunt dit wijzigen door een ander escape-teken op te geven, zoals in:

SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|'

Antwoord 2, autoriteit 48%

Eigenlijk zijn alle eerdere antwoorden ergens verminkt. Zoals je kunt zien in de link van Karoly Horvath, wiens significante bit wordt gereproduceerd door Explosion Pills, de juiste manier om naar 1 backslash (\) te zoeken is om 4 backslashes tegelijk te gebruiken (\\\\).

Trouwens, om boven die ene backslash te laten zien moest ik er twee tegelijk gebruiken en om die vier te laten zien moest ik er acht gebruiken.


Antwoord 3, autoriteit 7%

LIKEaccepteert twee jokertekens, %en _.

Om deze tekens te kunnen matchen, kan escape worden gebruikt: \%, \_. Dit betekent ook dat als u \wilt matchen, deze ook moet worden geëscaped.

Dit alles is gedocumenteerd in de handleiding.


Antwoord 4, autoriteit 5%

Voor het vinden van een \in een tekstveld moest ik de \twee keer escapen, anders werd de %aan het einde gevonden:

SELECT * FROM `table` where `field` LIKE '%\\\%';

Antwoord 5

Als u de (\’) uit de databasekolom (Test\’s) wilt verwijderen en wilt vervangen door apostrofie(Test’s), kunt u de volgende query gebruiken.

SELECT replace(column_name, "\\'", "'") FROM table where column_name  LIKE "%\\\%";

Other episodes