2012-04-02 3 views
1

Я использую oracle 11G с набором символов как utf8. У меня есть таблица, в которой есть японские и китайские символы.Набор символов в JDBC

Когда я запрашиваю базу данных с помощью простой программы JDBC, я получаю только вопросительные знаки в качестве вывода.

Может кто-нибудь, пожалуйста, помогите мне в этом?

+2

Как вы просматриваете выход? Если вы сомневаетесь, запишите каждый символ в качестве целого числа, а затем сравните его с кодами Unicode. –

+0

Я взял строку, которая извлекается из БД и преобразуется в массив символов и получает числовое значение каждого символа, используя следующую функцию: Character.getNumericValue (char); Я получаю -1 в качестве числового значения для всех символов. все символы являются только вопросительными знаками. – Suresh

+0

Это не то, как вы должны их получать - это пытается рассматривать их как цифры. Используйте 'charAt' и просто передайте int. –

ответ

0

ОК, так что вы говорите, что

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?

+0

Пещера Джастин, это только UTF8. не AL32UTF8. и для второго запроса он возвращает Typ = 1 Len = 26 CharacterSet = UTF8: 6d, 43,49,43,4f, e6,97, a5, e6,9c, ac, e3,81, b8, e3,82,88 , e3,81,86, e3,81,93, e3,81,9d. Я использую тонкий драйвер oracle – Suresh

+0

@ user1029292 - ОК. И это должно представлять строку «mCICO», за которой следуют 7 3-байтовых символов, не так ли? Это означает, что данные хранятся правильно. Какой драйвер Oracle вы используете? Тонкий драйвер JDBC? Драйвер OCI JDBC? Драйвер ODBC с мостом JDBC = ODBC? Что-то другое? –

+0

его тонкий драйвер JDBC. вот что я сейчас использую. – Suresh

0

Вопрос был решен Eclipse> Предпочтения> Общие> Рабочее пространство> Кодирование текстового файла в UTF-8 Спасибо всем.

Смежные вопросы