Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso pesquisar uma frase como O'% no MySql?


Você estava injetando uma barra invertida literal. Isto é suficiente:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

Testar:
SELECT 'O\\\'Brien', 'O\'Brien'

Atualização: Já existe uma resposta aceita, então vou adicionar alguns esclarecimentos.

Primeiro, eu havia esquecido o fato de que os dados armazenados estavam corrompidos. Desnecessário dizer que isso explica por que person_sname = 'O\\\'Brien' é verdade.

Em segundo lugar, o \ caractere tem dois usos na sintaxe do MySQL:
  1. É o caractere usado para compor sequências de escape :\n , \t ...
  2. É o caractere de escape padrão para inserir literal % e _ caracteres em expressões LIKE :foo LIKE '%abc\%def%'

O problema é que inserir um \ símbolo em uma expressão LIKE aciona ambos os comportamentos, então você realmente precisa inserir quatro barras invertidas para obter um :
person_sname like 'O\\\\\'Brien'

... a menos que você altere o segundo significado com o ESCAPE cláusula:
person_sname like 'O\\\'Brien' escape '|'

Claro, se os dados não estivessem corrompidos, você poderia simplesmente:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'