FAQ / Oracle / CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке [SQL.Ru]

Исправляем проблему с кодировкой с помощью смены кодировки

Вместо смены шрифта, можно сменить кодировку, которая используется при работе cmd.exe.
Узнать текущую кодировку можно введя в командной строке команду chcp, после ввода данной команды необходимо нажать Enter.
FAQ / Oracle / CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке [SQL.Ru]
Как видно на скриншоте, текущая используемая кодировка Windows-1251
Для изменения кодировки нам необходимо воспользоваться командой chcp <код_новой_кодировки>, где <код_новой_кодировки> – это сам код кодировки, на которую мы хотим переключиться. Возможные значения:

  • 1251 – Windows-кодировка (Кириллица);
  • 866 – DOS-кодировка;
  • 65001 – Кодировка UTF-8;

Т.е. для смены кодировки на DOS, команда примет следующий вид:

chcp 866

Для смены кодировки на UTF-8, команда примет следующий вид:

chcp 65001

Для смены кодировки на Windows-1251, команда примет следующий вид:

chcp 1251

Исправляем проблему с кодировкой с помощью смены шрифта

Первым делом нужно зайти в свойства окна: Правой кнопкой щелкнуть по верхней части окна -> Свойства -> в открывшемся окне в поле Шрифт выбрать Lucida Console и нажать кнопку ОК.FAQ / Oracle / CodePage, NLS_LANG: решение проблем с отображением сообщений на русском языке [SQL.Ru]
После этого не читаемые символы должны исчезнуть, а текст должен выводиться на русском языке.

Кракозябры в pl/sql developer

Ошибка в вашей настройке языка. Клиент Oracle берет настройку языка из виндовой переменной NLS_LANG, если я правильно помню, ее нужно установить в значение RUSSIAN_AMERICA.CL8MSWIN1251.

Сделать в Винде это можно в “Свойствах системы”, закладка “Дополнительно”, кнопка “Переменные среды”. Добавляете этот параметр, если он не создался клиентом Oracle и задаете значение.

Проблемы возникающие при использовании sqlplus.exe в oracle 11g на windows – dmitry bobrovsky blog

Начиная с версии Oracle 11.1 GUI утилита sqlplusw.exe объявлена как устаревшая (deprecated) и исключена из состава дистрибутива. Теперь приходиться использовать только консольную версию — sqlplus.exe. При её использовании, с русским языком, возникают проблемы. Сообщения самой sqlplus и сообщения выводимые скриптами (это разные вещи) отображаются не корректно (крякозябрами или символами псевдографики). Еще, некоторые стали задавать вопрос, как установить рабочую папку чтобы выполнялись вложенные скрипты. Разберёмся по порядку:

:/>  Ставить 10 виндовс или нет

Проблемы некорректных сообщений возникают из-за того что консоль по умолчанию выводит всё в кодировке OEM DOS 866, а скрипты это обычно текстовые файлы в кодировке MS WIN 1251. Кодировка сообщений sqlplus зависит от переменной NLS_LANG, а т.к. базы с данными на русском языке обычно создаются в кодировке  CL8MSWIN1251 (не RU8PC866), то и переменные NLS_LANG устанавливаются соответственно как CL8MSWIN1251.  Т.е. проблема из-за несовпадения кодировок консоли и программ, которые выводят сообщения на консоль.

1) Чтобы русские сообщения отображались в консоли корректно нужно соблюсти ТРИ условия.

1. В свойствах консоли (правой мышью на заголовке окна cmd) должен быть установлен unicode шрифт, например Lucida Console.

SNAGHTML5157ae4

SNAGHTML512b287

2. За кодировку выводимых сообщений отвечает третья часть переменной NLS_LANG и она должна быть CL8MSWIN1251 (пример, AMERICAN_CIS.CL8MSWIN1251).

3. Нужно переключить кодовую страницу консоли на 1251, командой

C:> chcp 1251

Если все три условия соблюдены — проблем с русскими буквами не будет.

Примечания:

1. Переменную NLS_LANG можно задавать тремя способами:

а) (глобально) (по умолчанию) В реестре в HKEY_LOCAL_MACHINESOFTWAREORACLE. Здесь переменная может быть в нескольких местах, особенно если на компьютере несколько ORACLE_HOME. Менять её нужно для того ORACLE_HOME из которого запускается sqlplus. Для 64-битных систем существует еще одна ветка реестра для Oracle — HKEY_LOCAL_MACHINESOFTWAREWow6432NodeORACLE. Если вы меняете переменную, а результат не меняется, хотя все остальные условия соблюдены, значит вы меняете не ту переменную, попробуйте поменять вообще все NLS_LANG, которые найдете или см.п. в).

б) (локально) Для конкретной DOS сессии. Прямо в консоли командой set

C:> SET NLS_LANG=AMERICAN_CIS.CL8MSWIN1251

в) (супер глобально) Задать как переменную окружения в ОС. Делать так я настоятельно НЕ  рекомендую. Но, такая установка перекрывает переменную в реестре, поэтому если вы меняете NLS_LANG в реестре, а результат не меняется — проверьте переменные окружения, командой  set без параметров.

:/>  Отображение размера папок
 в Проводнике
 |

C:> SET

2. Изменение переменной NLS_LANG на глобальном уровне влияет на все другие программы работающие с Oracle, например EXPIMP. Поэтому следует быть осмотрительным и для безопастности, для запуска sqlplus использовать bat или cmd файл в котором менять NLS_LANG на уровне текущей сессии.

2) Чтобы сообщения sqlplus выводились корректно см. п. 1).

Если сделать всё как описано в п.1) то все сообщения sqlplus будут выводить корректно на русском языке. Если у вас нет проблем с английским то я рекомендую выводит сообщения sqlplus на английском языке. Потому что в англоязычном сегменте сети гораздо больше информации чем в русском и если возникнет ошибка то по английскому сообщению найти решение будет проще и быстрее.

За язык сообщений sqlplus и других консольных утилит Oracle отвечает первая часть переменной NLS_LANG. Чтобы все сообщения было на английском языке — её нужно установить как AMERICAN (например, AMERICAN_CIS.CL8MSWIN1251).

3) Как установить рабочую папку чтобы выполнялись вложенные скрипты.

Для этого нужно запустить sqlplus из рабочей папки. Для примера предположим что в качестве рабочей папки нужно использовать папку c:EGRPSCRIPTS и запустить скрипт c:EGRPSCRIPTSUPDATE.sql, который вызывает из себя другие скрипты, некоторые из которых находиться в подпапках c:EGRPSCRIPTS.

C:> cd c:EGRPSCRIPTS
c:EGRPSCRIPTS>c:app32adminproduct11.2.0client_1binsqlplus.exe /nolog
SQL> @update

(на картинке еще отображен момент переключения кодовой страницы)

image

==========================================================

Для удобства использования, можно создать bat или cmd файл для запуска sqlplus.

REM echo off
REM Установка рабочей папки (можно убрать)
cd c:egrpscripts
SET NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251
chcp 1251
break
REM Два варианта запуска sqlplus
c:appadminproduct11.2.0dbhome_1BINsqlplus.exe /nolog
REM c:appadminproduct11.2.0dbhome_1BINsqlplus.exe /nolog @UPDATE
exit

Примечания:

— echo off — не выводить выполняемые команды на консоль, а только результат их выполнения. Я предпочитаю видеть что происходит поэтому отключил (REM) эту команду.

:/>  Что такое MSConfig или утилита настройки системы в Windows 10

— sqlplus.exe указана с полным путём. Это особенно полезно на компьютере с несколькими ORACLE_HOME, чтобы точно знать какой именно sqlplus вы запускаете. Если полный путь не указывать, то будет запускаться sqlplus из папки которая первой следует в переменной окружения PATH. Если ORACLE_HOME один — полный путь можно не указывать.

— даётся два варианта запуска sqlplus. Второй вариант сразу запускает на выполнение скрипт UPDATE.sql из рабочей папки c:egrpscripts.

Оставьте комментарий