Nie można cytować symboli zastępczych. To proste:
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
Pierwszy z nich jest symbolem zastępczym i działa zgodnie z oczekiwaniami. Drugi to test na równość ze znakiem zapytania. To już nie jest symbol zastępczy.
A potem pojawia się problem ?
będąc również metaznakiem wyrażeń regularnych. Jeśli symbole zastępcze MOGĄ być cytowane, należy podać
SELECT ... WHERE foo REGEXP '^.?'
czy to ?
być symbolem zastępczym zapytania, czy jest to operator zakresu regex „zero lub jeden”?
Jeśli chcesz używać symboli zastępczych w wyrażeniach regularnych, musisz "zbudować" wzorzec regex
SELECT ... WHERE foo REGEXP concat('^.', ?)
Dokładnie w taki sam sposób, w jaki musiałbyś zbudować LIKE
wzór:
SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right