Les espaces réservés ne peuvent pas être cités. C'est aussi simple que ça :
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
Le premier est un espace réservé et fonctionne comme prévu. L'autre teste l'égalité avec le caractère "point d'interrogation". Ce n'est plus un espace réservé.
Et puis il y a le problème de ?
étant également un métacaractère regex. Si les espaces réservés POURRAIENT être entre guillemets, alors donnés
SELECT ... WHERE foo REGEXP '^.?'
serait-ce ?
être un espace réservé de requête, ou est-ce l'opérateur de plage "zéro-ou-un" de la regex ?
Si vous souhaitez utiliser des espaces réservés dans les regex, vous devez "construire" le modèle de regex
SELECT ... WHERE foo REGEXP concat('^.', ?)
Exactement de la même manière que vous auriez à construire un LIKE
motif :
SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right