Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 NLS_LANG UTF8 и ISO8859  [new]
Чарс Сеттер
Guest
Имеем
Oracle 9.2
БД в CL8ISO8859P5, NLS_LANG на клиенте (клиент и сервер один комп) = RUSSIAN_CIS.CL8ISO8859P5

Запускаю OEM создаю табличку с varchar2, вставляю строку с русскими буквами.
Просматриваю данные в OEM и Toad, все ок.
Просматриваю данные в моей тулзе - закорючки (не вопросики, строка по длине такая же).
При этом в моей тулзе никакие Charset-ы не меняются.
Т.е. выставляется
CharsetID = 35 (CL8ISO8859P5).

Если же в своей тулзе я ставлю
CharsetID = 871 (UTF8) и читаю/пишу через UTF8 енкодер, то кирилица отображается корректно.

Вопросы:
1. OEM и Toad также поступает ставит NLS_CHARACTERSET UTF8 и через енкодер загоняет строку в UTF8?
2. Почему если NLS_CHARACTERSET выставлен корректно и совпадает с клиентским и NLS_CHARACTERSET БД, кирилица не читается и не записывается?
23 май 14, 11:03    [16059953]     Ответить | Цитировать Сообщить модератору
 Re: NLS_LANG UTF8 и ISO8859  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7131
Чарс Сеттер
Имеем
Oracle 9.2
БД в CL8ISO8859P5, NLS_LANG на клиенте (клиент и сервер один комп) = RUSSIAN_CIS.CL8ISO8859P5

Запускаю OEM создаю табличку с varchar2, вставляю строку с русскими буквами.
Просматриваю данные в OEM и Toad, все ок.
Просматриваю данные в моей тулзе - закорючки (не вопросики, строка по длине такая же).
При этом в моей тулзе никакие Charset-ы не меняются.
Т.е. выставляется
CharsetID = 35 (CL8ISO8859P5).

Если же в своей тулзе я ставлю
CharsetID = 871 (UTF8) и читаю/пишу через UTF8 енкодер, то кирилица отображается корректно.

Вопросы:
1. OEM и Toad также поступает ставит NLS_CHARACTERSET UTF8 и через енкодер загоняет строку в UTF8?
2. Почему если NLS_CHARACTERSET выставлен корректно и
совпадает с клиентским и NLS_CHARACTERSET БД, кирилица не читается и не записывается?


Поясните что Вы имели ввиду:
автор
через енкодер загоняет строку в UTF8


автор
БД в CL8ISO8859P5, NLS_LANG на клиенте
(клиент и сервер один комп) = RUSSIAN_CIS.CL8ISO8859P5


Расскажите как Вы настраивали, добавте выборку:
select * from nls_session_parameters;
select * from nls_database_parameters;


FAQ: CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке читали?

p.s.
1) OEM - работает через jdbc и всегда использует UTF8

2) Если у Вас несколько ORACLE_HOME, то установки в registry для каждой из HOME могут быть различными
(предполагаю что из-за этого в TOAD Все нормально, он пользуется правильной настройкой другой home)

3) Если NLS_LANG на клиенте и на сервере одлин и тот же NLS преобразований не производится
Ваше приложение из базы получает iso5 без преобразования то попытка его показать в cp1251 ...
23 май 14, 11:28    [16060168]     Ответить | Цитировать Сообщить модератору
 Re: NLS_LANG UTF8 и ISO8859  [new]
Чарс Сеттер
Guest
Vadim Lejnin,

Поясните что Вы имели ввиду:
автор
через енкодер загоняет строку в UTF8

В своей программе енкодер переводит
"Некая строка" -> "Некая строка"
и это записывается в БД


SQL> select * from nls_session_parameters;

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE RUSSIAN
NLS_TERRITORY CIS
NLS_CURRENCY р.
NLS_ISO_CURRENCY CIS
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD.MM.RR
NLS_DATE_LANGUAGE RUSSIAN
NLS_SORT RUSSIAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY р.
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

17 rows selected.

SQL> select * from nls_database_parameters;

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8ISO8859P5
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 9.2.0.1.0

20 rows selected.

автор
FAQ: CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке читали?

Читал

автор
2) Если у Вас несколько ORACLE_HOME, то установки в registry для каждой из HOME могут быть различными
(предполагаю что из-за этого в TOAD Все нормально, он пользуется правильной настройкой другой home)

Один хоум

автор
3) Если NLS_LANG на клиенте и на сервере одлин и тот же NLS преобразований не производится
Ваше приложение из базы получает iso5 без преобразования то попытка его показать в cp1251

О! Если принудительно выставить
CharsetID = 171 (cp1251)
работает.
Спасибо!
23 май 14, 12:04    [16060509]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить