sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg søge efter en sætning som O'% i MySql?

Du injicerede et bogstaveligt skråstreg. Dette er nok:

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

For at teste:

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

Opdatering: Der er allerede et accepteret svar, så jeg vil lige tilføje et par præciseringer.

For det første havde jeg overset det faktum, at lagrede data var beskadiget. Det er overflødigt at sige, at det forklarer hvorfor person_sname = 'O\\\'Brien' er sandt.

For det andet, \ karakter har to anvendelser i MySQL-syntaks:

  1. Det er det tegn, der bruges til at komponere escape-sekvenser :\n , \t ...
  2. Det er standard escape-tegn at indsætte bogstavelig % og _ tegn i LIKE-udtryk :foo LIKE '%abc\%def%'

Problemet er, at indsættelse af en \ symbol i et LIKE-udtryk udløser begge adfærd, så du skal faktisk indsætte fire omvendt skråstreg for at få én :

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

... medmindre du ændrer den anden betydning med ESCAPE klausul:

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

Selvfølgelig, hvis data ikke var beskadiget, kunne du blot:

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


  1. Sådan bruger du trigger i MySql til at lave fremmednøgle

  2. REGEXP ydeevne (sammenlign med LIKE og =)

  3. Tilslutning af Linux og UNIX til Azure SQL Data Warehouse

  4. MySQL automatisk konvertering på små bogstaver