Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP->Oracle русский 
:(
    Опции темы
mastanik
Дата 19.9.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Здравствуйте,

такая проблема, никак не получается внести русский текст в Оракл 8.

в JSP пишу:
Код

<%@ page contentType="text/html;  Charset=utf-8" language="java"%>


в Оракле:
Код

NLS_CHARACTERSET = CL8ISO8859P5
NLS_NCHAR_CHARACTERSET = CL8ISO8859P5

PM MAIL   Вверх
jsa
Дата 19.9.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



а подробнее?


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
mastanik
Дата 19.9.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



при занесении данных в базе отображаются вопросы. 
менял необходимые поля с VARCHAR2 на NVARCHAR2 - Оракл ругается ошибкой 
ERROR at line 1:
ORA-12704: character set mismatch
PM MAIL   Вверх
y3u
Дата 19.9.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



как именно ты данные пишешь в БД? Какие параметры у коннектора ты используешь?


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
DEER
Дата 19.9.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Цитата

Charset=utf-8


ИМХО. везде юзай cp121


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
mastanik
Дата 19.9.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



система по всей вероятности будет использоваться не только в русскоязычных странах, поэтому хочется уникодом пользоваться.

пишу так

Код

Class.forName("oracle.jdbc.OracleDriver");
        con = DriverManager.getConnection("jdbc:oracle:thin:@ююю:1521:ююю", "ююю", "ююю");
        con.setAutoCommit(false);
        Statement statement = con.createStatement();
        String sql;
        int row = 0;
        
        sql = "INSERT INTO t(name, role) VALUES(?,?)";    
        OraclePreparedStatement pstmt = (OraclePreparedStatement)con.prepareStatement(sql) ;
        pstmt.setString(1, name);
        pstmt.setString(2, role);
        pstmt.execute();

PM MAIL   Вверх
LSD
Дата 19.9.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



1. Раз в базе кодировка ISO-8859-5, то юникод тебе только в NVARCHAR2 светит.

2. Определи где ошибка: накидай маленькое приложение которое будет соединяться с БД и писать туда текс в поля VARCHAR2 на NVARCHAR2. Если запишется нормально надо разбираться с JSP, что там не так, иначе смотреть параметры соединения с базой.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
3x3
Дата 20.9.2006, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(mastanik @ 19.9.2006,  12:12)
при занесении данных в базе отображаются вопросы. 
менял необходимые поля с VARCHAR2 на NVARCHAR2 - Оракл ругается ошибкой 
ERROR at line 1:
ORA-12704: character set mismatch

На клиенте (т.е. где приложение, общающееся с базой) - какой NLS_LANG в окружении стоит? Какая версия базы? Если вы делаете те же самые запросы из sqlplus - что происходит?


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
mastanik
Дата 20.9.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



хмм, где посмотреть NLS_LANG клиента? (допустим это SQL Worksheet) БД - Oracle 8. 
делаю так, в поле с типом NVARCHAR2 вношу данные:

Код

insert into t(name) values('мастаник');


выдает:
Код

ERROR at line 1:
ORA-12704: character set mismatch


если поле типа VARCHAR2, то заносятся вопросы.
PM MAIL   Вверх
batigoal
Дата 20.9.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(mastanik @  20.9.2006,  12:00 Найти цитируемый пост)
хмм, где посмотреть NLS_LANG клиента?

На винде - в реестре. HKEY_LOCAL_MACHINE --> Software --> Oracle.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mastanik
Дата 20.9.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



хм, NLS_LANG = N/A
PM MAIL   Вверх
3x3
Дата 20.9.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(mastanik @ 20.9.2006,  12:30)
хм, NLS_LANG = N/A

Ну и поставьте там что-нить типа "AMERICAN_AMERICA.CL8MSWIN1251", главное что бы он понял, что русскими буквами кормят, а не какими-нибудь там smile


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
jsa
Дата 20.9.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



Цитата(mastanik @ 19.9.2006,  13:43)
Код

Class.forName("oracle.jdbc.OracleDriver");
        con = DriverManager.getConnection("jdbc:oracle:thin:@ююю:1521:ююю", "ююю", "ююю");
        con.setAutoCommit(false);
        Statement statement = con.createStatement();
        String sql;
        int row = 0;
        
        sql = "INSERT INTO t(name, role) VALUES(?,?)";    
        OraclePreparedStatement pstmt = (OraclePreparedStatement)con.prepareStatement(sql) ;
        pstmt.setString(1, name);
        pstmt.setString(2, role);
        pstmt.execute();

откуда дровишки?  smile , т.е. откуда name, role, если постом получаешь, то они должны быть в ISO8859, по идее должны ложиться нормально
Цитата

при занесении данных в базе отображаются вопросы. 

чем смотришь, уверен что в базе вопросы, а может только на клиенте?


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
mastanik
Дата 21.9.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



прописал в реестре
 
AMERICAN_AMERICA.CL8MSWIN1251

те же вопросы.
PM MAIL   Вверх
3x3
Дата 21.9.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Боюсь, что всё может оказаться ещё хитрее. Во-первых ваш thin JDBC драйвер может не поддерживать русские кодировки. Т.е. будь у вас в базе 1251 и на клиенте 1251 - то он бы ещё может и гнал бы буквы напрямую без конверсии а так - кто его знает. Это касается именно thin-драйвера, который ходит в базу напрямую и не требует установки клиента. Скачайте с oracle.com свежую версию, там у них к JDBC пакет для интернационализации приложен.

Но для чистоты эксперимента попробуйте неск. вещей: 
 - выставить NLS_LANG как переменную окружения процесса, хотя лучше забивать в параметры самому соединению thin может вообще не ориентироваться на системные настройки: мало ли что там у юзера, загрузившего апплет, понастроено.
 - использовать не Ср1251, а UTF8 кодировку
 - убедитесь, что для сессии выставлена правильная кодировка: select * from nls_session_parameters (этот селект должен быть сделан из проблемной сессии)
 - отказаться от thin JDBC в пользу просто JDBC, который будет лазать в базу через её родной OCI. На сервере-то это даже и лучше. Но это путь для слабых духом. 


PS
Попробую поколбасить сегодня ночью thin JDBC от десятки, только не факт, что удастся воспроизвести проблему, у меня там в базе NLS_CHARACTERSET=UTF8 забит, да и вообще она десятка экспресс без поддержки российской локализации - когда они говорят "Европа", то, видимо подразумевают "Западная Европа".
Да, вот ещё страничка, на которой много полезного про Oracle JDBC-драйвера http://www.oracle.com/technology/tech/java...c_faq.htm#34_03

Это сообщение отредактировал(а) 3x3 - 21.9.2006, 13:08


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.