Eh bien, c'est assez facile à déboguer :
SELECT '"listeListeOuiNon":"2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'
renvoie 0
SELECT '"listeListeOuiNon":"1"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'
renvoie 1
SELECT '"listeListeOuiNon":"1,2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'
renvoie 1
Donc, quelque chose ne va pas à vos côtés... parce qu'il ne pouvait tout simplement pas renvoyer les lignes où le corps est égal à "listeListeOuiNon":"2"
. Mais il est possible que ce corps ait plusieurs de ces déclarations, quelque chose comme :
body => '"listeListeOuiNon":"1,2", "listeListeOuiNon":"2"'
Vous devez donc modifier votre regexp :
'^"listeListeOuiNon":".*1.*"$'
Eh bien, alors vous devez modifier votre requête :
SELECT DISTINCT tag, body FROM pages
WHERE (body REGEXP BINARY '"listeListeOuiNon":".*1.*"') AND NOT (body REGEXP BINARY '"listeListeOuiNon":"2"')