ОК, так что вы говорите, что
SELECT value
FROM v$nls_parameters
WHERE parameter = 'NLS_CHARACTERSET'
возвращается UTF8
? Это довольно необычно, особенно в 11g - было бы гораздо чаще видеть значение AL32UTF8
, которое является более новой версией стандарта Unicode.
Что происходит, когда вы смотрите на данные, которые фактически хранятся в базе данных? Если вы запускаете тот же запрос, который вы используете через JDBC напрямую, но вызываете функцию DUMP
вместо того, чтобы просто выбирать столбец, каков результат?
SELECT DUMP(column_name, 1016)
FROM table_name
WHERE some_key = some_value
Вы используете тонкий драйвер JDBC Oracle? Или вы используете драйвер OCI JDBC? Или вы используете драйвер ODBC Oracle и мост JDBC-ODBC, поскольку ваши теги подразумевают? Последнее было бы необычайно необычным в этот день и в возрасте - действительно нет причин когда-либо использовать драйвер моста JDBC-ODBC, если платформа базы данных предоставляет собственный драйвер JDBC.
Есть ли у клиента NLS_LANG
?
Как вы просматриваете выход? Если вы сомневаетесь, запишите каждый символ в качестве целого числа, а затем сравните его с кодами Unicode. –
Я взял строку, которая извлекается из БД и преобразуется в массив символов и получает числовое значение каждого символа, используя следующую функцию: Character.getNumericValue (char); Я получаю -1 в качестве числового значения для всех символов. все символы являются только вопросительными знаками. – Suresh
Это не то, как вы должны их получать - это пытается рассматривать их как цифры. Используйте 'charAt' и просто передайте int. –