Oracle
Настройка и конфигурация

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

Опубликовано: 05 май 04
Рейтинг:

Автор: Violina
Прислал: Violina

Немного теории

Языковые настройки Oracle клиента задаются с помощью переменной

NLS_LANG=<language>_<territory>.<charset>

которая может быть прописана либо в реестре(Windows)

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251

либо в переменной окружения

C:\>SET NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251


DOS консоль

При несоответствии кодовой страницы, заданной в NLS_LANG, и кодовой страницы, заданной для DOS консоли, русские сообщения отображаются некорректно.

C:\>SET NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251

C:\>chcp
Текущая кодовая страница: 866

C:\>sqlplus vio/vio

SQL*Plus: Release 10.1.0.2.0 - Production on ╤Ё ╠рщ 5 12:26:30 2004


Мы можем сменить либо NLS_LANG

C:\>SET NLS_LANG=RUSSIAN_CIS.RU8PC866

C:\>chcp
Текущая кодовая страница: 866

C:\>sqlplus vio/vio

SQL*Plus: Release 10.1.0.2.0 - Production on Ср Май 5 12:29:18 2004


либо кодовую страницу для DOS консоли

C:\>SET NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251

C:\>chcp 1251
Текущая кодовая страница: 1251

C:\>sqlplus vio/vio

SQL*Plus: Release 10.1.0.2.0 - Production on Ср Май 5 12:29:18 2004


Примечания

1) При смене кодовой страницы для DOS консоли на 1251, следует убедиться что для неё установлены шрифты Lucida Console.

2) Смена NLS_LANG в реестре может повлечь за собой некорректное отображение русских символов в оконных приложениях Windows, поэтому подстраивать NLS_LANG лучше для конкретной DOS сессии.


Графические программы SQL NAVIGATOR, ERWin и др.

Для решения проблем с отображением и сохранением русских символов в вышеуказанных программах могут помочь следующие изменения в реестре

Windows Registry Editor Version 5.00
   
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper]
"ARIAL"=dword:000000cc
"DEFAULT"=dword:000000cc
   
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial,0"="Arial,204"
"Arial Cyr,0"="Arial,204"
"Courier,0"="Courier New,204"
"Courier New,0"="Courier New,204"
"Courier New Cyr,0"="Courier New,204"
"Fixedsys,0"="Fixedsys,204"
"Helv,0"="MS Sans Serif,204"
"Lucida Console,0"="Lucida Console,204"
"MS Serif,0"="MS Serif,204"
"MS Sans Serif,0"="MS Sans Serif,204"
"PROMT Helv Cyr,0"="PROMT Helv Cyr,204"
"Small Fonts,0"="Small Fonts,204"
"System,0"="System,204"
"Tahoma,0"="Tahoma,204"
"Times New Roman,0"="Times New Roman,204"
"Times New Roman Cyr,0"="Times New Roman,204"
"Tms Rmn,0"="MS Serif,204"

Необходимо создать reg файл с вышеприведенным содержимым, выполнить его и перезагрузиться. Если проблема не решилась, можно попробовать выполнить следующие изменения

Windows Registry Editor Version 5.00
    
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"


Примечания

1) При смене "1252"="c_1251.nls" могут возникнуть проблемы с отображением умляутов "ö", "ä", "ü" и "ß" в различных приложениях. В этом случае восстановите прежнее значение для "1252".

Комментарии


  • вариант выделения цветом консольного окна с prod
    -- login.sql:
    -- - или в рабочем каталоге sqlplus, если ярлык(шрифт Lucida Console!)
    -- - или в текущем, см. host echo %CD% под win
    -- замените ORCL.SQL.RU на глобальное имя вашей промышленной базы

    define _if_prod ='07'
    col color_prod noprint new_value _if_prod

    set serveroutput on size 1000000

    set trimspool on
    set long 5000
    set linesize 190
    set pagesize 0

    column plan_plus_exp format a80

    column global_name new_value gname
    set termout off
    select lower(user) || '@' ||
    decode(global_name, 'ORACLE8.WORLD', '8.0', 'ORA8I.WORLD',
    '8i', global_name ) global_name from global_name;
    set sqlprompt '&gname> '

    select decode(global_name, 'ORCL.SQL.RU', '0A', '07')
    color_prod from global_name;

    host color &_if_prod
    host chcp 1251

    undef _if_prod
    set termout on

    ---------------------------
    -- connect.sql: (@connect scott@orcl)
    set termout on
    connect &1
    @login.sql
    set termout on
    undef 1

  • cool !

  • Очень полезная инфа, спасибо :)

  • спасибо большое

  • echo off
    SET NLS_LANG=RUSSIAN_CIS.RU8PC866
    chcp
    break
    sqlplus /nolog
    exit

  • bat или cmd можете подсказать для запуска?

  • ещё раз спасибо!

  • эээ... сенкю вэри мач))))

  • ПОМОГЛООООО ТО КАК!!!!!!!!СПАСИБО!

  • Пролили свет в очередной темный угол Oracle-а. Спасибо.

  • Очень хорошая статья. Четко и по сути! Спасибо!

  • а я мучался...

  • ОЧЕРЕДНОЙ РАЗ СПАСИБО!!! А то мне советовали такое, что этим можн было систему обрушить!!! :)))

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

  • Yeeees! Помогло, thanks!

  • помогло однако :)



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Oracle / Настройка и конфигурация / CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке