sql >> Database >  >> RDS >> Mysql

Hoe kan ik zoeken naar een zin zoals O'% in MySql?

Je injecteerde een letterlijke backslash. Dit is genoeg:

SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

Om te testen:

SELECT 'O\\\'Brien', 'O\'Brien'

Bijwerken: Er is al een geaccepteerd antwoord, dus ik zal een paar verduidelijkingen toevoegen.

Ten eerste had ik over het hoofd gezien dat opgeslagen gegevens beschadigd waren. Onnodig te zeggen dat dit verklaart waarom person_sname = 'O\\\'Brien' is waar.

Ten tweede, de \ karakter heeft twee toepassingen in de MySQL-syntaxis:

  1. Het is het teken dat wordt gebruikt om Escape-reeksen :\n , \t ...
  2. Het is de standaard escape-teken om letterlijk % in te voegen en _ tekens in LIKE-expressies :foo LIKE '%abc\%def%'

Het probleem is dat het invoegen van een \ symbool in een LIKE-expressie activeert beide gedragingen, dus u moet eigenlijk vier . invoegen backslashes om één te krijgen :

person_sname like 'O\\\\\'Brien'

... tenzij je de tweede betekenis verandert met de ESCAPE clausule:

person_sname like 'O\\\'Brien' escape '|'

Als de gegevens niet beschadigd zijn, kunt u natuurlijk eenvoudig:

person_sname = 'O\'Brien'
person_sname like 'O\'Brien'


  1. Gegevensmodel autoreparatiewerkplaats

  2. Hoe een beschadigde MPTT-boom (geneste set) in de database te repareren met behulp van SQL?

  3. Het gebruik van het entiteitsraamwerk met een MySQL-database en de modelontwerper haalt geen opgeslagen proc-parameters op

  4. Mysql-query's combineren die meerdere self-joins recyclen