Informix Logo


Как правильно настроить переменные среды окружения, чтобы можно было работать с русским алфавитом?

Это один из наиболее часто встречаемых вопросов, с которым пользователи INFORMIX обращаются в службу технической поддержки, хотя поддержка национальных языков реализована достаточно просто (см. в IM/RE, ?1/1997 статью "Система глобальной поддержки языков в Informix". - Ред.).
Для того чтобы у вас не возникало проблем при работе с локализованными базами данных, достаточно просто понимать процесс установления соединения клиента с сервером и какие GLS/NLS-переменные для каких целей используются.
Начнем с того, что продукты INFORMIX версий до 7.2 поддерживают NLS, начиная с версии 7.2 и выше, реализуют концепцию GLS,  но поддержка NLS сохраненена для совместимости.
Итак, когда GLS-клиент запрашивает соединение с сервером, то он передает следующие переменные:

1 CLIENT_LOCALE
DB_LOCALE

 

2. Если установлена переменная DBNLS, то клиент посылает переменные
DBNLS
LC_*.
Переменная LANG не передается серверу, ее значение используется только для установки значений соответствующих переменных категории LC_*.

3. Если DBNLS не установлено и CLIENT_LOCALE тоже не установлено, то клиент устанавливает значение по умолчательнию для CLIENT_LOCALE (равное en_us.8859-1 для клиентов на UNIX и en_us.1252 для Windows)
Если DBNLS не установлено и DB_LOCALE не установлено, то клиент вообще не посылает значение переменной DB_LOCALE.

GLS-сервер, получив значения переменных от клиента, производит сравнение следующих двух величин:
- DB_LOCALE, полученной от клиента,
- DB_LOCALE, хранимой в системном каталоге базы данных.

Если значения локалей не соответствуют, то сервер выставляет флаг SQLWARN7 в структуре SQLCA. Это не означает отказ в установлении соединения, клиент может использовать базу данных, однако вся ответственность за правильность интерпретации и ввода данных ложится на клиента, для внутренней же обработки данных (при сравнении, сортировки и т. д.) сервер использует значение, считанное из системного каталога. Хотя, как правило, все стандартные утилиты INFORMIX в этом случае выдают ошибку о несоответствии локалей и закрывают сессию.
Если клиент и сервер оба поддерживают GLS, ситуация проста. Некоторые осложнения возможны, когда приходится работать в смешанном GLS/NLS окружении.
Наиболее часто возникающей проблемой является конфликт имен локалей, так как в GLS и NLS они имеют разный вид. Если GLS локаль обязана иметь строго регламентированное название, то имя NLS локали в известной степени произвольно. Для избежания этой проблемы возможны два пути:

1. Для поддержки NLS имен локалей существует директория $INFORMIXDIR/gls/lcX/os, куда можно поместить файлы GLS локалей (из $INFORMIXDIR/gls/lcX/ru_ru), дав им произвольные имена. GLS продукты могут использовать эти файлы в режиме поддержки NLS.

2. Так как имена NLS локалей могут быть произвольными, то их можно привести в соответствие с требованиями GLS (Это не так, если операционной системой является WINDOWS).

Например, при необходимости открыть NLS базу данных, созданную в кодировке ISO 8859-5 с помощью GLS клиента, которому необходимо отображать русские буквы в кодировке MSWIN 1251, можно установить переменные среды следующим образом:

CLIENT_LOCALE=ru_ru.1251
DB_LOCALE=ru_ru.8859-5
DBNLS=2
LANG=ru_RU_iso

При этом необходимо помнить, что NLS продукты используют локали операционной системы, в то время как GLS продукты пользуются собственными файлами.
Конечно, крайне желательно, что бы файлы NLS, описывающий кодировку ru_RU_iso по смыслу соответствовали файлам GLS для кодировки ru_ru.8859-5, иначе возможно возникновение непредсказуемых ошибок.
В случае, когда NLS клиент работает с GLS сервером, нет другого выбора, кроме как использовать NLS переменные. В этом случае необходимо разрешить конфликт имен NLS/GLS локалей, так как необходимо, чтобы значения переменных LC_COLLATE и LC_CTYPE (или переменной LANG) были понятны как для сервера, так и для клиента. Кроме этого, теряется возможность преобразования кодовых страниц, так как оно производится GLS клиентом.

Informix Magazine Russian Edition


Украинская баннерная сеть
 

[Home]

Сайт поддерживается группой пользователей Информикс на Украине.

Hosted by NO-more.