Ilekroć baza danych zmienia znak na ?
, oznacza to po prostu, że kodepoint danej litery jest całkowicie poza zakresem kodowania znaków, ponieważ tabela jest skonfigurowana do użycia.
Co do przyczyny problemu: ç
leży ISO-8859-1 zakresie i ma dokładnie taki sam jak w UTF-8 kodowy (U+00E7). Jednak punkt kodowy UTF-8 z ş
leży całkowicie poza zakresem ISO-8859-1 (U+015F, a ISO-8859-1 tylko do U + 00FF). DB nie przetrwa postaci i zastąpi ją przez ?
.
Podejrzewam, że twoja tabela DB jest nadal skonfigurowana do używania ISO-8859-1 (lub w jednym z innych zgodnych kodowań ISO-8859, gdzie ç
ma taki sam kodepunkt jak w UTF-8).
Interfejs Java/JDBC API wykonuje swoją pracę doskonale w odniesieniu do kodowania znaków (Java w całości używa Unicodu) i kodowanie połączenia JDBC DB jest również poprawnie skonfigurowane. Jeśli Java/JDBC miałby nieprawidłowo używane ISO-8859-1, wówczas Trwały efekt byłby Åakça
(the ş
exist bajtów 0xC5
i 0x9F
który reprezentuje Å
i a
w ISO-8859-1 i ç
opuszczeniu w bajtów 0xC3
i 0xA7
, który reprezentuje Ã
i §
w ISO-8859-1).
Jakiej bazy danych używasz?I czy jest skonfigurowany tak, aby akceptował Unicode (lub cokolwiek, czego potrzebujesz dla şakça) w tej kolumnie? – Thilo