Bất cứ khi nào cơ sở dữ liệu thay đổi ký tự thành ?
, thì điều đó đơn giản có nghĩa là điểm của ký tự được đề cập hoàn toàn nằm ngoài phạm vi mã hóa ký tự khi bảng được cấu hình để sử dụng.
Vì nguyên nhân của sự cố: ç
nằm trong phạm vi ISO-8859-1 và có cùng một điểm giống như trong UTF-8 (U+00E7). Tuy nhiên, điểm mã UTF-8 của ş
nằm hoàn toàn nằm ngoài phạm vi ISO-8859-1 (U+015F trong khi ISO-8859-1 chỉ lên tới U + 00FF). DB sẽ không tồn tại nhân vật và thay thế nó bằng ?
. Vì vậy, tôi nghi ngờ rằng bảng DB của bạn vẫn được định cấu hình để sử dụng ISO-8859-1 (hoặc trong một trong các mã ISO-8859 tương thích khác, trong đó ç
có cùng một điểm giống như trong UTF-8).
API Java/JDBC đang thực hiện công việc của nó hoàn toàn phù hợp với mã hóa ký tự (Java sử dụng Unicode tất cả các cách) và mã hóa kết nối JDBC DB cũng được định cấu hình chính xác. Nếu Java/JDBC sẽ có sai đã qua sử dụng tiêu chuẩn ISO-8859-1, thì kết quả tiếp tục tồn tại sẽ được Åakça
(các ş
tồn tại của byte 0xC5
và 0x9F
đại diện Å
và a
trong ISO-8859-1 và ç
tồn tại của byte 0xC3
và 0xA7
đại diện cho Ã
và §
trong ISO-8859-1).
Bạn đang sử dụng cơ sở dữ liệu nào?Và nó được cấu hình để chấp nhận Unicode (hoặc bất cứ điều gì bạn cần cho şakça) trong cột đó? – Thilo