Кодировка OTRS для Oracle

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Кодировка OTRS для Oracle

Сообщение kravit » 28 ноя 2016, 15:28

Всем добрый день!
Помогите решить проблему с кодировкой.
Установлен OTRS v.5 и подключен к Oracle 10g.
OTRS - установлен на Ubuntu 16.04 + установлен Oracle instant client 10g (по инструкции от Oracle, а так же добавлены среды окружения:
$ORACLE_HOME='/opt/oracle/instantclient'
$NLS_LANG='AMERICAN_AMERICA.AL32UTF8' )

база Oracle 10g находится на другом сервере и стоит на Windows 2008R2. база работает на кодировке win1251 - NLS_LANG="AMERICAN_AMERICA.CL8MSWIN1251"

Создаю агента в otrs и сохраняю, после сохранения русские буквы отображаются ???????? знаками.:(
на самой базе данных с помощью sqlplus делаю select таблицы users и смотрю что отлично записываются русские буквы и все читабельно.
захожу на otrs (на Ubuntu) и в консоле ubuntu c помощью sqlplus делаю select таблицы users и тоже все отлично отображается.
получается что именно веб часть отображает неправильно русские буквы и показывает вопросительные знаки.

Подскажите как решить проблему с русскими буквами и куда рыть дальше?
искать кодировку в apache или в perl?????

N_ton
OTRS Новобранец
Сообщения: 108
Зарегистрирован: 09 авг 2012, 22:57
Откуда: Санкт-Петербург
Благодарил (а): 1 раз
Контактная информация:

Re: Кодировка OTRS для Oracle

Сообщение N_ton » 28 ноя 2016, 16:20

Попробуйте поиграться с:

Kernel/Config.pm - Config file for OTRS kernel

# if your frontend is unicode and the charset of your
# customer database server is iso-8859-1, use these options.
SourceCharset => 'utf-8',
DestCharset => 'utf-8',
OTRS 3.3.8, Debian 7, PostgreSQL 9.1.13
OTRS 4.0.17, Debian 8, MySQL + MSSQL

kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Re: Кодировка OTRS для Oracle

Сообщение kravit » 28 ноя 2016, 17:16

спасибо. попробую! потом отпишусь

kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Re: Кодировка OTRS для Oracle

Сообщение kravit » 28 ноя 2016, 17:33

А в моем config.pm таких настроек нет. их надо самому добавить? и куда? в начало файла или в конец?

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: Кодировка OTRS для Oracle

Сообщение mukexa » 28 ноя 2016, 18:04

Если придерживаться структуры файла, то там есть строки
"insert your own config settings "here""
И чуть ниже пару закометированых примеров

Код: Выделить всё

    # $Self->{SessionUseCookie} = 0;
    # $Self->{CheckMXRecord} = 0;
OTRS 5s, Ubuntu 12.04

N_ton
OTRS Новобранец
Сообщения: 108
Зарегистрирован: 09 авг 2012, 22:57
Откуда: Санкт-Петербург
Благодарил (а): 1 раз
Контактная информация:

Re: Кодировка OTRS для Oracle

Сообщение N_ton » 29 ноя 2016, 09:29

Может быть я не правильно понял автора темы, Oracle используется как внешнее хранилище данных о клиентах? или же Oracle - база ОТРС?
вариант с файлом Config.pm (могу и ошибаться) работает для внешнего хранилища клиентов.
Вообще, исходя из своей практики, в случае с использованием внешней БД как хранилище клиентов, удобно использовать вьюхи с преобразованными типами данных.(может быть я и КЭП Очевидность)
OTRS 3.3.8, Debian 7, PostgreSQL 9.1.13
OTRS 4.0.17, Debian 8, MySQL + MSSQL

kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Re: Кодировка OTRS для Oracle

Сообщение kravit » 29 ноя 2016, 10:16

немного поясню.
установил otrs на ubuntu 16.04 и установил oracle client (как в инструкции на otrs.org), установил все модули для perl
Запустил через браузер installer.pl там первоначальные настройки otrs и подключение к базе данных, указал ip адрес (другого сервера) логин и пароль и все.
otrs благополучно подключился и как бы что-то создал в oracle.
Далее запустил в браузере index.pl и зашел под root@localhost и захотел завести новых агентов. создаю нового агента он записывается в базу.
Просматриваю агентов через браузер и где я вбивал имя и фамилию на русском языке там одни вопросительные знаки. решил посмотреть с помощью sqlplus, там при запросе русские буквы отображаются.
Изменить NLS_LANG в базе данных oracle я не могу (используется для других задач)
Если у меня NLS_LANG на базе стоит NLS_LANG="AMERICAN_AMERICA.CL8MSWIN1251"

какой я должен поставить в конфигурационном файле otrs? В файле Config.pm (там есть параметр $ENV{NLS_LANG}= для oracle)

kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Re: Кодировка OTRS для Oracle

Сообщение kravit » 29 ноя 2016, 10:31

Я так и не нашел параметры
SourceCharset => 'utf-8',
DestCharset => 'utf-8',

В файле Config.pm есть ссылка на другой файл
# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #
# $Self->{SessionUseCookie} = 0;
# $Self->{CheckMXRecord} = 0;

в файле Defaults.pm есть строчки
# Self->{'Database::Connect'} = 'SET NAMES utf8';
# $Self->{DefaultCharset} = 'utf-8';

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Кодировка OTRS для Oracle

Сообщение ykolesnikov » 29 ноя 2016, 10:48

Данные занесенные в Config.pm перекрывают данные аналогичные параметров файла Default.pm.
Почитайте в мануале порядок обработки конфигурационных файлов.
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

N_ton
OTRS Новобранец
Сообщения: 108
Зарегистрирован: 09 авг 2012, 22:57
Откуда: Санкт-Петербург
Благодарил (а): 1 раз
Контактная информация:

Re: Кодировка OTRS для Oracle

Сообщение N_ton » 29 ноя 2016, 11:36

kravit писал(а):какой я должен поставить в конфигурационном файле otrs? В файле Config.pm (там есть параметр $ENV{NLS_LANG}= для oracle)
Предположу что можно попробовать:
NLS_LANG=RUSSIAN_CIS.AL32UTF8
OTRS 3.3.8, Debian 7, PostgreSQL 9.1.13
OTRS 4.0.17, Debian 8, MySQL + MSSQL

kravit
OTRS Новобранец
Сообщения: 15
Зарегистрирован: 28 ноя 2016, 12:48

Re: Кодировка OTRS для Oracle

Сообщение kravit » 30 ноя 2016, 11:58

В общем ничего не выходит.:(
Я уже ставил разные NLS_LANG и в oracle client и в конфиге otrs (Config.pm) ничего не помогает.
Я подозреваю что проблема не в этом.
Проблема в том что когда otrs делает запрос в базу (с помощью perl - а вернее DBD::Oracle - модуль который я устанавливал для otrs)
то при выполнении запроса (SELECT......) она не понимает русские буквы и на web выводит вопросительные знаки.
Сама страничка выводится на русском как надо, а вот данные агентов (Имя Фамилия) выводятся вопросительными знаками т.к. они на русском языке.
наверное где-то нужно указать что при запросе из базы надо декодировать

oleinikov
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 09 ноя 2017, 12:52

Re: Кодировка OTRS для Oracle

Сообщение oleinikov » 09 ноя 2017, 13:03

Хочу поднять тему.
Уже неделю не могу справиться с кодировкой в oracle. Симптомы те же что описаны выше - '?????'
OTRS-4
В Kernel/Config.pm все начиналось с простой записи:

Код: Выделить всё

$ENV{NLS_LANG}        = 'AMERICAN_AMERICA.AL32UTF8';
А теперь дошел до такого:

Код: Выделить всё

$ENV{NLS_LANG}        = 'AMERICAN_AMERICA.AL32UTF8';
$ENV{LANG} = 'ru_RU.UTF-8';
$ENV{LC_PAPER} = 'ru_RU.UTF-8';
$ENV{LC_ADDRESS} = 'ru_RU.UTF-8';
$ENV{LC_MONETARY} = 'ru_RU.UTF-8';
$ENV{LC_NUMERIC} = 'ru_RU.UTF-8';
$ENV{LC_TELEPHONE} = 'ru_RU.UTF-8';
$ENV{LC_IDENTIFICATION} = 'ru_RU.UTF-8';
$ENV{LC_MEASUREMENT} = 'ru_RU.UTF-8';
$ENV{LC_TIME} = 'ru_RU.UTF-8';
$ENV{LC_NAME} = 'ru_RU.UTF-8';


    $Self->{CustomerUser3} = {
     Name => 'M2000',
     Module => 'Kernel::System::CustomerUser::DB',
     Params => {
      DSN => 'dbi:Oracle://192.168.168.6:1521/...',
      User => '...',
      Password => '...',
      Table => 'customer_user',
      ora_charset => 'AL32UTF8',
      SourceCharset => 'utf-8',
      DestCharset => 'utf-8',
      CaseSensitive => 0
     },
...
Ничего не помогает.
Дошел до того, что начал осваивать perl. Написал скрипт:

Код: Выделить всё

#!/usr/bin/perl
use strict;
use utf8;
use DBI;
use warnings;
$ENV{NLS_LANG}        = 'AMERICAN_AMERICA.AL32UTF8';

    my $dbh = DBI->connect('dbi:Oracle://192.168.168.6:1521/...', '...', '...');
    my $sth = $dbh->prepare(q{
        SELECT * FROM customer_user
    });
    $sth->execute;
    binmode(STDOUT,':utf8');
    while ( my @row = $sth->fetchrow_array )
    {
     foreach my $v (@row)
     {
      if ($v)
      {
       print "$v ";
      }
     }
     print "\n";
    }
1;
Запускаю из командной строки. Кириллица выводится нормально.
Что не так с OTRS? Или может с апачем?
Прописал в конфиг апача:

Код: Выделить всё

SetEnv NLS_LANG AMERICAN_AMERICA.AL32UTF8
SetEnv NLS_CHARACTERSET AL32UTF8
Бесполезно...
Что еще можно сделать?
Спасибо.
OTRS 6.0.4, openSUSE Leap 42.3

oleinikov
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 09 ноя 2017, 12:52

Re: Кодировка OTRS для Oracle

Сообщение oleinikov » 10 ноя 2017, 04:14

Сам себе и отвечу. Вся проблема была с тем, что никакие ухищрения не помогали передать апачу переменную окружения NLS_LANG.
У меня все вертится на opensuse, поэтому я сделал так. В /etc/sysconfig/apache2 в конец добавил строчку:

Код: Выделить всё

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
И вуа'ля! Появилась кириллица!
В других сборках linux файл может быть другим, но смысл в том, что нужно определить эту переменную где-то в скрипте запускающем апач до запуска.
OTRS 6.0.4, openSUSE Leap 42.3

Ответить