Кириллица в клиенте Oracle Database

Очередная статья на эту тему, но с некоторыми уточнениями.
 
Имеем:
Windows 7 x64
ODBC-драйвер для работы с Oracle Database
Стороннее ПО, использующее ODBC-подключение к БД
 
Проблема: 
Знаки вопроса при отображении кириллицы в клиентском ПО, а также иероглифы при отображении кириллицы в SQLPlus.

 
 
 
 
 
 
 
 
 
Как оказалось:
В системе должна быть правильно установлена переменная NLS_LANG, отвечающая за языковые настройки. Формат описания параметра NLS_LANG:
<Язык>_<Территория>.<Кодировка>
, где:
  <Язык> – AMERICAN/RUSSIAN и др.
  <Территория> – AMERICA/RUSSIA/CIS и др.
  <Кодировка> – CL8MSWIN1251/CL8KOI8R/RU8PC866/AL32UTF8/UTF8 и др.

 
ПРИМЕЧАНИЕ: Непосредственно на кодирование символов влияет только <кодировка>, указанная после точки.
 
При каждом клиентском соединении с БД Oracle задаются и потом используются параметры сессии (таблица NLS_SESSION_PARAMETERS). Проверить их значение для текущей сессии можно запросом:

Для утилиты SQLPlus можно задать нужные языковые настройки несколькими способами (в порядке уменьшения приоритетности):

1) Выполнить ALTER SESSION в самом клиентском приложении, например:

2) Установить NLS_LANG в текущем терминальном сеансе cmd или bat-файле.

Получить:

Установить:

3) Установить NLS_LANG в переменной окружения системы:

Свойства системы => Переменные среды => Создать переменную среды пользователя

4) Установить NLS_LANG в ключе ветки реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\oracle\KEY_XE

 
Но при этом, если мы установим кодировку в NLS_LANG в CL8MSWIN1251, то в консоли тоже нужно установить аналогичную кодовую страницу, а также шрифт Lucida Console (ПКМ на заголовке окна консоли => Свойства => Шрифт), иначе останутся кракозябры.
 
Кодовая страница в текущей терминальной сессии
Получить:

Установить:

1251 – Windows (кириллица)
866 – DOC-кодировка
65001 – UTF-8
 
 
Клиентское ПО, например, программа ViewODBC или PL SQL Developer, берет NLS_LANG ТОЛЬКО из переменных окружения, а не из реестра. По крайней мере, не только у меня вышло так.
ПРИМЕЧАНИЕ 2: Не забывайте перезапустить клиентскую программу после установки переменной окружения.
 
Вот тут еще есть интересные эксперименты с вариациями значений параметров CHARACTERSET, NLS_LANG и LANG (на Linux) и других.
 
 

4 thoughts on “Кириллица в клиенте Oracle Database

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *