![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| mastanik |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
Здравствуйте,
такая проблема, никак не получается внести русский текст в Оракл 8. в JSP пишу:
в Оракле:
|
||||
|
|||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 2 Всего: 20 |
а подробнее?
-------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
при занесении данных в базе отображаются вопросы.
менял необходимые поля с VARCHAR2 на NVARCHAR2 - Оракл ругается ошибкой ERROR at line 1: ORA-12704: character set mismatch |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 7 Всего: 13 |
как именно ты данные пишешь в БД? Какие параметры у коннектора ты используешь?
-------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: нет Всего: 13 |
ИМХО. везде юзай cp121 -------------------- |
|||
|
||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
система по всей вероятности будет использоваться не только в русскоязычных странах, поэтому хочется уникодом пользоваться.
пишу так
|
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
На клиенте (т.е. где приложение, общающееся с базой) - какой NLS_LANG в окружении стоит? Какая версия базы? Если вы делаете те же самые запросы из sqlplus - что происходит? -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| mastanik |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
хмм, где посмотреть NLS_LANG клиента? (допустим это SQL Worksheet) БД - Oracle 8.
делаю так, в поле с типом NVARCHAR2 вношу данные:
выдает:
если поле типа VARCHAR2, то заносятся вопросы. |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
На винде - в реестре. HKEY_LOCAL_MACHINE --> Software --> Oracle. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
хм, NLS_LANG = N/A
|
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Ну и поставьте там что-нить типа "AMERICAN_AMERICA.CL8MSWIN1251", главное что бы он понял, что русскими буквами кормят, а не какими-нибудь там -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| jsa |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 2 Всего: 20 |
откуда дровишки?
чем смотришь, уверен что в базе вопросы, а может только на клиенте? -------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
||||||
|
|||||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
прописал в реестре
AMERICAN_AMERICA.CL8MSWIN1251 те же вопросы. |
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| 3x3 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Вобщем вот так у меня заработало в тестовом сервлете, и вставляет русские буквы (проверял в стороннем приложении в эту базу лазающем - буквы в таблице русские) и вынимает:
У вас должно и нормальное соединение зажить:
У меня jdbc:oracle:oci не живёт из-за небольшого насилия над базой по части юникода в varchar2 - ломается на длине русских строк. Похоже в штатном oci-клиенте до сих пор присутствует непонимание того, что буквы бывают длиннее одного байта. В общем было бы интересно узнать - заживут ли у вас оба драйвера. Для теста использована таблица простейшей структуры:
По ходу отмечена проблемка в связи с тем, что rollback не откатывает транзакцию, но, думаю, это режим у JDBC-драйвера по умолчанию такой интересный, надо разбираться. Это сообщение отредактировал(а) 3x3 - 22.9.2006, 03:56 -------------------- Зачем платить больше, когда можно заплатить дважды? |
||||||
|
|||||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
А в БД какая кодировка настроена?
|
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
UTF-8. У меня сейчас европейский eXpress Edition стоит, русского NLS там нет вообще. Т.е. русских чарсетов нет, русской сортировки нет (не проверял, кстати), русских сообщений нет, русских дат нет. И UTF-8 я ему насильно прописал, только что-б буквы русские попробовать. Без перекодировки (т.е. пришло в UTF8 и сохраняется в UTF8) - хоть русские буквы засовываются. Хотя varchar2 при этом считает длину не по количеству символов, а по количеству байтов, т.е. макс.допустимое количество букв в строке будет ниже указанного при создании таблицы ровно в два раза. Что бы в длине строк не зависеть от кодировки, с 9й версии можно задавать поля в символах: create table t ( x varchar2( 20 CHAR ), ... ) Вам собственно нужно провести 2х3 экспериментов: используя oci и thin драйвера с кодировками как у Базы, UTF-8 и какую-нить 8-битную какую ваша Java понимает, 1251 например. При этом, на всякий случай, выставляйте соответствующий NLS_LANG и в окружении процесса. Это сообщение отредактировал(а) 3x3 - 28.9.2006, 16:58 -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
АААААААА!!!!!!!!
Кажись заработало! Спасибо огромное!!!!!!! |
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Ну так поделитесь чего и как заработало в вашей конкретной конфигурации. На будущее може ещё кому пригодится. -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| mastanik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.6.2006 Репутация: нет Всего: нет |
Пример 3х3 заработал.
|
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
ОК. По всей видимости из-за вот этого: prop.setProperty("NLS_LANG", "AMERICAN_AMERICA.UTF8"); Тогда как резюме: ИМХО можно сделать вывод, что thin-драйвер не полагается на настройки на клиенте - ведь он может и из апплетки работать на клиенте, который или настроен неправильно или вообще не знает про существование Oracle. Т.е. он полагается на дефолтные настройки базы, но ничего про ISO-8859-5, видимо, не знает - т.е. JVM не имеет установленных правил трансляции этой кодировки в юникод. Задав параметры соединения явно, вы указали базе во что она должна транслировать буквы перед отправкой их на клиента. Если это так, то вместо UTF8 должна бы и CL8MSWIN1251 работать, если она установлена на сервере БД и поддержана клиентской джавой. -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |