Как изменить язык nls в оракуле

Обновлено: 03.07.2024

E
Поддержка национальных языков

Oracle8 Enterprise Edition предоставляет NLS, который позволяет пользователям взаимодействовать с базой данных на выбранном ими языке. При установке Oracle8 Enterprise Edition вы выбираете язык сообщений базы данных. Программа установки Oracle предоставляет значение параметра NLS_LANG в зависимости от выбранного языка.

Параметр NLS_LANG использует следующий формат:

Указывает язык и соглашения для отображения сообщений, названия дня и месяца.

Указывает территорию и правила для расчета номеров недель и дней.

CHARACTER_SET

Управляет набором символов, используемым для отображения сообщений.

Языком по умолчанию при установке является либо язык операционной системы, либо параметр NLS_LANG для выбранного в данный момент домашнего каталога Oracle.

Параметр NLS_LANG хранится в реестре в подразделе HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG для первого дома Oracle на вашем компьютере. Для последующих установок в разные дома Oracle на одном компьютере путь будет HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME ID\NLS_LANG, где ID — это уникальный номер, идентифицирующий дом Oracle. См. Приложение C, «Параметры конфигурации и реестр» для получения дополнительной информации о расположении подразделов для нескольких домов Oracle.
Дополнительная информация:

См. Oracle8 Reference для получения информации о параметре NLS_LANG и параметрах инициализации NLS.

Значения по умолчанию для NLS_LANG

В следующей таблице перечислены значения NLS_LANG по умолчанию, если вы выберете любой из этих языков во время установки Oracle8 Enterprise Edition.

Если вы выберете. Тогда значение NLS_LANG равно.

ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256

Бразильский португальский

БРАЗИЛЬСКИЙ ПОРТУГЕЛЬСКИЙ_BRAZIL.WE8ISO8859P1

CATALAN_CATALONIA.WE8ISO8859P1

CROATIAN_CROATIA.EE8MSWIN1250

CZECH_CZECH REPUBLIC.EE8MSWIN1250

DANISH_DENMARK.WE8ISO8859P1

DUTCH_THE NETHERLANDS.WE8ISO8859P1

AMERICAN_AMERICA.WE8ISO8859P1

FINNISH_FINLAND.WE8ISO8859P1

FRENCH_FRANCE.WE8ISO8859P1

GERMAN_GERMANY.WE8ISO8859P1

GREEK_GREECE.EL8MSWIN1253

HEBREW_ISRAEL.IW8MSWIN1255

HUNGARIAN_HUNGARY.EE8MSWIN1250

ITALIAN_ITALY.WE8ISO8859P1

JAPANESE_JAPAN.JA16SJIS

KOREAN_KOREA.KO16KSC5601

Латиноамериканский испанский

ЛАТИНСКАЯ АМЕРИКА ИСПАНСКИЙ_АМЕРИКА.WE8ISO8859P1

NORWEGIAN_NORWAY.WE8ISO8859P1

POLISH_POLAND.EE8MSWIN1250

PORTUGUESE_PORTUGAL.WE8ISO8859P1

ROMANIAN_ROMANIA.EE8MSWIN1250

RUSSIAN_CIS.CL8MSWIN1251

Упрощенный китайский

УПРОЩЕННЫЙ КИТАЙСКИЙ_КИТАЙ.ZHS16GBK

SLOVAK_SLOVAKIA.EE8MSWIN1250

SLOVENIAN_SLOVENIA.EE8MSWIN1250

SPANISH_SPAIN.WE8ISO8859P1

SWEDISH_SWEDEN.WE8ISO8859P1

Традиционный китайский

ТРАДИЦИОННЫЙ КИТАЙСКИЙ_ТАЙВАНЬ.ZHT16BIG5

TURKISH_TURKEY.WE8ISO8859P9

Настройки NLS_LANG в режиме MS-DOS и пакетном режиме

При использовании таких утилит Oracle, как Server Manager, SQL Loader, SQL*Plus, Import и Export в режиме MS-DOS, в поле набора символов параметра NLS_LANG для сеанса необходимо сначала установить правильное значение. Это необходимо, поскольку в режиме MS-DOS за некоторыми исключениями используется кодовая страница (кодовая страница OEM), отличная от кодовой страницы Windows (кодовая страница ANSI), а для параметра Oracle Home NLS_LANG по умолчанию в реестре всегда установлено соответствующее значение. Кодовая страница Windows.Если параметр NLS_LANG для сеанса режима MS-DOS установлен неправильно, сообщения об ошибках и данные могут быть повреждены из-за неправильного преобразования набора символов. В следующей таблице перечислены наборы символов Oracle, соответствующие первичной кодовой странице OEM в режиме MS-DOS для каждого из поддерживаемых языков.

Набор символов

Бразильский португальский

Латиноамериканский испанский

Упрощенный китайский

Традиционный китайский

Для японского, корейского, упрощенного китайского и традиционного китайского языка кодовая страница OEM идентична кодовой странице ANSI. В этом случае нет необходимости устанавливать NLS_LANG в режиме MS-DOS.

Аналогично, в пакетном режиме установите правильное значение набора символов NLS_LANG, вставив команду SET NLS_LANG в начале пакетной процедуры, в соответствии с набором символов файлов, которые будут обрабатываться в процедуре.

Установка дополнительных языков

<ПР>
  • Запустите установщик Oracle.
  • Введите язык, который хотите установить, в диалоговом окне "Параметры установки Oracle".
  • Повторно установите продукты Oracle.
  • Этот метод сохраняет любую ранее установленную языковую поддержку и добавляет новый язык.

    В качестве примера я собираюсь изменить значение NLS_LANG с английского на шведский.

    <р>1. Определить текущее значение NLS_LANG в базе данных

    ВЫБРАТЬ * ИЗ V$NLS_PARAMETERS;

    NLS_TIMESTAMP_FORMAT RRRR-MM-DD HH24:MI:SSXFF

    NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR

    NLS_TIMESTAMP_TZ_FORMAT RRRR-MM-DD HH24:MI:SSXFF TZR

    Формат значения NLS_LANG: [NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]

    В приведенном выше случае значение NLS_LANG равно SWEDISH_ SWEDEN. WE8MSWIN1252

    <р>2. Установить значение NLS_LANG в клиенте

    а. Установите значение NLS_LANG в клиенте (это не постоянное решение, проверьте постоянное решение 2.b)

    ИЗМЕНИТЬ НАБОР СЕАНСА NLS_LANGUAGE = ' ' ;

    ИЗМЕНИТЬ НАБОР СЕССИИ NLS_TERRITORY = ' ' ;

    ИЗМЕНИТЬ НАБОР СЕАНСА NLS_LANGUAGE = 'ШВЕДСКИЙ' ;

    ИЗМЕНИТЬ НАБОР СЕССИИ NLS_TERRITORY = 'ШВЕЦИЯ';

    ВЫБРАТЬ USERENV('LANG') ИЗ DUAL;

    ВЫБРАТЬ * ИЗ V$NLS_PARAMETERS

    где параметр in('NLS_LANGUAGE', 'NLS_TERRITORY');

    б. Установите значение NLS_LANG в клиенте (это постоянное решение)

    <р>я. Заходим в Пуск->выполнить

    ii. Введите regedit и нажмите «ОК».

    III. Перейдите к разделу HKEY_LOCAL_MACHINE->ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ->ORACLE->KEY_OraClientxxx_homeX (xxx — это версия клиента oracle, а X — используемый в настоящее время домашний каталог)

    IV. Дважды щелкните NLS_LANG и измените значение данных. Например, в примере сценария значение NLS_LANG изменено на SWEDISH_SWEDEN.WE8MSWIN1252

    в. Закрыть реестр

    Перед внесением изменений убедитесь, что у вас есть резервная копия реестра Windows.

    <р>я. Нажмите «Компьютер», выберите «Свойства».

    ii. Выберите Расширенные настройки системы.

    III. На вкладке "Дополнительно" выберите "Переменные среды".

    в. Задайте имя переменной NLS_LANG и значение переменной SWEDISH_SWEDEN.WE8MSWIN1252

    ви. Нажмите «ОК», и теперь вы должны увидеть новую переменную среды, которую вы только что создали.

    setenv NLS_LANG

    Пример: setenv NLS_LANG SWEDISH_SWEDEN. WE8MSWIN1252

    <р>3. Перезапустите клиент. Например, если вы используете Toad, перезапустите TOAD, чтобы изменения вступили в силу.

    Поддержка глобализации позволяет хранить, обрабатывать и извлекать данные на родных языках. Языки, которые могут храниться в базе данных Oracle, кодируются наборами символов, поддерживаемыми базой данных Oracle. Поддержка глобализации гарантирует, что утилиты базы данных, сообщения об ошибках, порядок сортировки, даты, время, денежные, числовые и календарные соглашения адаптируются к родному языку и языковым настройкам.

    Настройка поддержки глобализации в командной строке SQL*Plus

    NLS_LANG в клиентской среде SQL*Plus.

    База данных Oracle во время установки.

    Клиент SQL*Plus

    Среда клиента SQL*Plus настраивается путем установки переменной среды NLS_LANG, которая считывается SQL*Plus при запуске.

    База данных Oracle

    Среда базы данных Oracle настраивается путем создания базы данных с требуемым набором символов.

    Настройка поддержки нескольких языков в i SQL*Plus

    i SQL*Plus поддерживает несколько языков с помощью кодировки Unicode UTF-8 в веб-браузере, используемом для сеанса i SQL*Plus, и с помощью кодировки AL32UTF8 (реализация Unicode в Oracle) в приложении i SQL*Plus. Сервер, обслуживающий сеанс.

    Если ваша база данных Oracle также использует AL32UTF8, то существует взаимно однозначное соответствие между наборами символов в базе данных и в i SQL*Plus. В противном случае может произойти некоторое сопоставление символов.

    Веб-браузер

    Пользовательский интерфейс i SQL*Plus может отображаться на нескольких языках:

    Китайский (Китай) [zh-cn]

    Китайский (Тайвань) [zh-tw]

    Французский (Франция) [fr]

    Немецкий (Германия) [de]

    Итальянский (Италия) [it]

    Португальский (Бразилия) [pt-br]

    Испанский (международный/традиционный) [es]

    Пользовательский интерфейс i SQL*Plus автоматически отображается на языке, указанном в качестве предпочтительного языка в веб-браузере.

    Чтобы отобразить пользовательский интерфейс i SQL*Plus на языке, отличном от предпочтительного языка вашего существующего веб-браузера, добавьте язык в свой веб-браузер, а затем выберите язык для использования. Например, чтобы отобразить пользовательский интерфейс i SQL*Plus на японском языке в Internet Explorer 6.0:

    Запустите Internet Explorer.

    Выберите Инструменты > Свойства обозревателя > Языки. > Добавить .

    Выберите японский [ja] и нажмите OK .

    Выберите японский [ja] и нажимайте кнопку «Переместить вверх», пока он не окажется вверху списка.

    Введите URL-адрес i SQL*Plus. Пользовательский интерфейс i SQL*Plus теперь отображается на японском языке.

    Ваш веб-браузер должен поддерживать кодировку символов UTF-8. Большинство современных веб-браузеров поддерживают кодировку UTF-8.

    Сервер приложений

    Язык, используемый для вывода запросов i SQL*Plus, зависит от языковых и региональных значений переменной среды NLS_LANG, действующих при запуске сервера приложений i SQL*Plus. Параметр charset игнорируется и всегда имеет значение UTF8. Значения языка и территории используются для всех сеансов i SQL*Plus, запускаемых с этого сервера приложений. Однако вы можете использовать команду ALTER SESSION, чтобы изменить язык и территорию, используемые в течение текущего сеанса. Например, чтобы использовать китайский язык и условные обозначения в текущем сеансе, введите

    Новые страницы, отображаемые в браузере i SQL*Plus, теперь отображаются с сообщениями об ошибках и текстовыми полями на китайском языке. Информация теперь отображается в соответствии с китайской конвенцией. Это временное изменение текущего входа в текущий сеанс i SQL*Plus. Чтобы проверить, какие настройки действуют в данный момент, введите:

    Значения NLS_TERRITORY и NLS_LANGUAGE соответствуют языковым и территориальным компонентам переменной NLS_LANG.

    Переменная среды NLS_LANG

    Переменная среды NLS_LANG состоит из трех компонентов, каждый из которых управляет подмножеством функций глобализации.

    Ваша операционная система и клавиатура должны поддерживать выбранный вами набор символов. Возможно, вам потребуется установить дополнительное вспомогательное программное обеспечение. Дополнительные сведения о NLS_LANG и поддержке программного обеспечения см. в Руководстве по поддержке глобализации баз данных Oracle.

    Настройка специфичного для локали поведения клиента SQL*Plus достигается с помощью параметров NLS. Эти параметры могут быть указаны несколькими способами, в том числе в качестве параметра инициализации на сервере. Параметры, управляющие поведением сервера, см. в Руководстве по поддержке глобализации баз данных Oracle.

    NLS_LANG имеет синтаксис:

    где язык определяет соглашения, используемые для сообщений базы данных Oracle, порядок сортировки, названия дней и месяцев. Например, чтобы получать сообщения на японском языке, установите ЯПОНСКИЙ язык. Если язык не задан, по умолчанию используется АМЕРИКАНСКИЙ.

    где территория определяет соглашение для дат по умолчанию, а также для денежных и числовых форматов. Например, чтобы использовать формат территории Японии, установите для территории ЯПОНИЯ. Если территория не указана, значение по умолчанию определяется значением языка, поэтому устанавливается значение АМЕРИКА.

    где в командной строке SQL*Plus charset указывает кодировку набора символов, используемую SQL*Plus для обработки данных, и обычно подходит для пользовательского терминала. Нелогичные комбинации можно ставить, но работать не будет. Например, японский язык не может поддерживаться с использованием западноевропейского набора символов, такого как:

    Однако японский язык может поддерживаться с помощью набора символов Unicode. Например:

    кодировка не используется сервером приложений i SQL*Plus. Сервер приложений i SQL*Plus всегда использует кодировку символов AL32UTF8, реализацию Unicode в Oracle. Его нельзя изменить.

    Просмотр настроек NLS_LANG

    Вы можете просмотреть параметр NLS_LANG, введя команду SELECT:

    Значения NLS_TERRITORY и NLS_LANGUAGE соответствуют языковым и территориальным компонентам переменной NLS_LANG.

    Вы также можете получить список допустимых значений для NLS_SORT, NLS_LANGUAGE, NLS_TERRITORY и NLS_CHARACTERSET, запросив таблицу представления динамической производительности NLS V$NLS_VALID_VALUES.

    Настройка NLS_LANG

    Вы можете установить переменную среды NLS_LANG для управления функциями глобализации.

    Пример 11-1. Настройка поддержки японского языка в SQL*Plus в Windows

    Убедитесь, что вы вышли из текущего сеанса SQL*Plus.

    Откройте «Систему» ​​в меню «Пуск» > «Настройки» > «Панель управления».

    Перейдите на вкладку "Дополнительно" и выберите "Переменные среды".

    Создайте новую переменную среды NLS_LANG со значением Japanese_Japan.JA16SJIS.

    Возможно, вам потребуется перезапустить Windows, чтобы этот параметр вступил в силу.

    Пример 11-2 Настройка поддержки японского языка в SQL*Plus в UNIX

    Убедитесь, что вы вышли из текущего сеанса SQL*Plus.

    Установите переменную NLS_LANG с помощью set или setenv в зависимости от используемой оболочки UNIX. Например, в csh вы должны ввести:

    Настройка локали вашего терминала UNIX определяет точное значение параметра NLS_LANG. Дополнительные сведения о параметре NLS_LANG см. в Руководстве по поддержке глобализации баз данных Oracle.

    Пример 11-3. Настройка поддержки японского языка в базе данных Oracle

    Для хранения данных в японском наборе символов с использованием кодировки UTF-8 убедитесь, что база данных Oracle создана с использованием набора символов AL32UTF8. Информацию о создании базы данных в кодировке, отличной от US7ASCII, см. в Руководстве по установке базы данных Oracle.

    Глобализация сбивает с толку. Все и вся используют разные символы в разных наборах символов. Oracle готов к этому и предлагает несколько параметров и переменных для управления поведением. Но нужно быть осторожным при их настройке, поэтому я хочу дать грубый обзор основных вещей.

    Основы

    При отправке или извлечении данных символов в/из базы данных существует от трех до четырех параметров, которые могут повлиять на отображение этих данных.

    nls-kette

    1. Это кодировка внутри самой базы данных.
    2. Набор символов, который клиент Oracle использует для отображения символьных данных.
    3. Набор символов, используемый операционной системой на стороне клиента.
    4. Набор символов, который PuTTY (или любая другая эмуляция терминала, которую вы предпочитаете) предполагает, что удаленная сторона использует.

    На рисунке показан маршрут, по которому символьные данные проходят в процессе чтения или записи в базу данных. В этом посте я расскажу о желтой части диаграммы.

    Начнем с базы данных. Внутри хранятся некоторые символьные данные, которые закодированы с использованием сконфигурированного набора символов базы данных. Теперь мы хотим получить данные из базы данных. Это означает, что клиент Oracle (2) отправляет SQL в базу данных (1) и, в свою очередь, получает данные, которые автоматически преобразуются в набор символов, настроенный для клиента Oracle. Обычно это делается с помощью переменной NLS_LANG. Кроме того, это единственный момент, когда может произойти преобразование набора символов.

    Далее символьные данные отображаются операционной системой (3), которая использует собственный набор символов. Преобразования больше нет, это означает, что наша настройка NLS_LANG должна совпадать с настройкой нашей ОС.

    И, наконец, возможно, существует эмуляция терминала, такая как PuTTY, которая также определяет набор символов, который, очевидно, должен совпадать с тем, который используется ОС, к которой мы подключаемся.

    Что может пойти не так

    Имея в виду этот процесс, мы видим, что неправильные настройки параметров могут быть распознаны не сразу. При вставке данных в базу данных с неправильными настройками и последующем запросе этих данных будут получены правильные результаты, поскольку перевод выполняется таким же образом. Мы начинаем видеть неправильные символы, когда запрашиваем данные с правильными настройками.

    Допустим, у нас есть клиент Windows и мы используем SQL*Plus внутри CMD для вставки данных. Общесистемная переменная NLS_LANG имеет значение MSWIN1252, так как Windows использует этот набор символов. Но, как описано в предыдущем посте, CMD использует другой набор символов, PC850.

    Давайте создадим таблицу, вставим некоторые данные и запросим эти данные:

    01-win-1252

    Итак, мы видим, что специальные символы, которые я вставил, отображаются правильно при запросе данных, потому что одно и то же неправильное преобразование происходит в обоих направлениях. Более или менее, я понятия не имею, почему знак евро перепутался… Может быть, потому, что у PC850 нет знака евро…

    Теперь я запрашиваю данные у SQL Developer, который использует набор символов Windows для отображения данных:

    02-win-1252

    Теперь снова может произойти преобразование, в зависимости от настроек базы данных. И на этот раз мы видим неправильные данные, потому что преобразование было неверным, когда я вставил данные.

    Следующий шаг, вставка данных с помощью SQL Developer:

    03-win-1252

    Вставлено и отображается правильно. Но, очевидно, CMD показывает это следующим образом:

    04-win-1252

    Это все просто потому, что CMD отображает символы в другом наборе символов, чем остальная часть Windows. Итак, когда мы меняем CMD, чтобы использовать правильную кодовую страницу, это выглядит так:

    05-win- 1252

    Теперь первый набор данных отображается по-другому, но данные из SQL Developer отображаются правильно.

    Еще один способ правильно отобразить данные — изменить параметр NLS_LANG внутри CMD:

    06-win- 1252

    Отсутствует только знак евро, так как он не является частью набора символов PC850.

    Теперь я снова устанавливаю для NLS_LANG значение MSWIN1252 и вставляю третью запись:

    07-win- 1252

    Пока все выглядит хорошо, но опять же, я должен перепроверить это с помощью SQL Developer:

    Хорошо, данные по-прежнему отображаются правильно. Так что это правильная настройка, которую мы должны использовать для Windows.

    А как насчет Linux? Linux использует кодировку UTF8 внутри:

    linux-nls

    Поэтому я должен установить для NLS_LANG значение AL32UTF, чтобы мои данные отображались правильно:

    09-win-1252

    Как и ожидалось, данные отображаются так, как должны быть. Но это только потому, что мой PuTTY использует правильные настройки. Что если я изменю PuTTY для использования MSWIN1252? Возможно, это правильный параметр, потому что моя Windows, в которой работает PuTTY, использует этот набор символов:

    10-win-1252

    Как теперь выглядит результат?

    11-win-1252

    Полный беспорядок, так как мой многобайтовый вывод из Linux интерпретируется как однобайтовый. Так что это не очень хорошая идея. Настройка набора символов PuTTY должна соответствовать набору символов, используемому операционной системой, к которой мы подключаемся:

    putty-nls

    Заключение

    Будьте осторожны при настройке параметров NLS как на стороне клиента, так и на стороне сервера. Вы можете не заметить неправильную конфигурацию, пока используете одну и ту же дорожку для извлечения и вставки данных. Просто используйте другой клиент для перепроверки данных, с которыми вы имеете дело. Все зависит от ОС и правильной настройки NLS_LANG на стороне клиента.

    Читайте также: