Sudahkah Anda memverifikasi bahwa nilai yang disimpan dalam database sebenarnya adalah U+003f (tanda tanya)? Ada berbagai macam konvensi tentang cara menampilkan karakter yang tidak ada dalam font yang dipilih, dan menampilkannya sebagai ?' cukup umum.
Jadi kemungkinan besar, karakter disimpan dengan benar, dan untuk alasan apa pun, hanya ditampilkan sebagai '?'. Pada dasarnya, abaikan bagaimana itu dirender, dan lihat codepoint apa yang disimpan dalam database. Apakah itu U+9996 atau U+003f (atau sesuatu yang lain sama sekali)? Jangan membabi buta berasumsi bahwa hanya karena itu dirender sebagai tanda tanya, itu sebenarnya adalah tanda tanya yang disimpan dalam database.