Har du verifierat att värdet som lagras i databasen verkligen är U+003f (frågetecken)? Det finns alla möjliga konventioner för hur man visar tecken som inte finns i det valda teckensnittet och visar dem som ?' är ganska vanligt.
Så troligtvis lagras karaktären korrekt, och av olika anledningar visas helt enkelt som '?'. I princip, ignorera hur det renderas och titta på vilken kodpunkt som lagras i databasen. Är det U+9996 eller U+003f (eller något helt annat)? Anta inte blint att bara för att det renderas som ett frågetecken så är det faktiskt ett frågetecken som lagras i databasen.