Cuando una base de datos cambia un carácter a ?
, significa simplemente que el punto de código del carácter en cuestión está completamente fuera del rango para la codificación de caracteres que la tabla está configurada para usar.
En cuanto a la causa del problema: la ç
se encuentra dentro ISO-8859-1 gama y tiene exactamente el mismo punto de código como en UTF-8 (U+00E7). Sin embargo, el punto de código UTF-8 de ş
se encuentra completamente fuera del rango de ISO-8859-1 (U+015F mientras que ISO-8859-1 solo sube a U + 00FF). El DB no persistirá el carácter y lo reemplazará por ?
.
Entonces, sospecho que su tabla DB todavía está configurada para usar ISO-8859-1 (o en una de las otras codificaciones ISO-8859 compatibles donde ç
tiene el mismo punto de código que en UTF-8).
La API Java/JDBC está haciendo su trabajo perfectamente bien con respecto a la codificación de caracteres (Java usa Unicode hasta el final) y la codificación de conexión JDBC DB también está configurada correctamente. Si Java/JDBC tendría incorrectamente utilizados ISO-8859-1, entonces el resultado PERSISTED habría sido Åakça
(la ş
existen de bytes 0xC5
y 0x9F
que representa Å
y a
en ISO-8859-1 y la ç
existen de bytes 0xC3
y 0xA7
que representa Ã
y §
en ISO-8859-1).
¿Qué base de datos estás utilizando?¿Y está configurado para aceptar Unicode (o lo que sea que necesite para şakça) en esa columna? – Thilo