Проблема с кодировкой в базе OTRS

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

Модератор: ykolesnikov

Ответить
xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Проблема с кодировкой в базе OTRS

Сообщение xpasha » 05 май 2014, 22:31

Коллеги, помогите разобраться в чем дело. Конвертирую перловым скриптом данные по клиентам в базу OTRS из оракловой базы биллинга. В самой базе данные хранятся в win-1251. Конвертирую в utf8 в перловом скрипте примерно так: from_to($user_addr,'cp-1251','utf-8');
В базе данные действительно в UTF8, прямой селект дает нормальные русские надписи при выводе в консоль где кодировка выставлена в UTF8. В вебе же видно кракозябры, как в phpmyadmin, так и в интерфейсе работы с пользователями-клиентами самого OTRS. Кодировка базы utf8_general_ci, в my.cnf присутствует строка default-character-set=utf8. Скриншот прилагается.
Вложения
screen_otrs.jpg
Скриншот OTRS с кракозябрами.
screen_otrs.jpg (362.76 КБ) 9500 просмотров
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 05 май 2014, 22:50

В Апаче есть строка AddDefaultCharset UTF-8. В Defaults.pm строки SourceCharset => 'utf-8 и DestCharset => 'utf-8', только ничего не помогает, все равно кракозябры.
Если подсунуть сии строки со скриншота онлайн декодерам, то они успешно декодируются в читаемые, при этом декодеры утверждают, что была успешно проведена декодировка win-1251 в utf-8. То есть получается OTRS перекодирует utf-8 в win-1251, а обратная конверсия дает как раз нужный результат. Осталось лишь выяснить почему OTRS так делает.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 06 май 2014, 00:59

Похоже разобрался. В перловом скрипте нужно было сделать следующие установки $dbh->{'mysql_enable_utf8'} = 1; $dbh->do('SET NAMES utf8'); Иначе почему-то вставка UTF-8 в базу проходила некорректно. Опыт сын ошибок трудных как говориться. Возможно мой опыт кому-то также будет полезен.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

firebolt
OTRS Новобранец
Сообщения: 178
Зарегистрирован: 13 сен 2012, 13:46

Re: Проблема с кодировкой в базе OTRS

Сообщение firebolt » 06 май 2014, 06:13

Спасибо, что отписались о решении!
Версия OTRS (6.0.10)
Debian 9 Stretch
Версия СУБД (MySQL 5.7.22)

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 06 май 2014, 17:35

Ну вопрос возможно еще не решен принципиально. С кодировкой все стало нормально, но проверить какие опции нужны, а какие нет и в какой части OTRS это еще предстоит при переносе на рабочую конфигурацию, отладка понятное дело идет на тестовой инсталляции. А в процессе "плясок с бубном" решая проблему кодировки, я понатыкал в конфигах компонентов системы вышеупомянутых в других сообщениях этого треда опций, а может они просто и не нужны и без них все пойдет нормально достаточно добавить в перловый скрипт найденные мной опции, ибо OTRS давно имеет UTF-8 дефолтной кодировкой. То же касается и collation в базе данных, вроде неплохо работает поиск по простой маске в OTRS при установленной кодировке базы utf8_general_ci, а значит вид кодировки указан подходящий, хотя еще вопрос как именно проводит поиск по маске сам OTRS, средствами запросов mysql или средствами Perl. Интерес тут чисто академический и в коде копаться можно потом решив практическую задачу. Так что о результатах своих наблюдений в этом вопросе при последующих работах внедрения скрипта портирования базы между Оracle и mysql-базой OTRS еще отпишусь. Тема эта очень актуальная, гуглив по ней нашел сведения о том, что у людей возникают проблемы при работах с различными внешними базами данных и вообще портирование в OTRS из других источников принципиально отличающихся по структуре данных о клиенте системах типа биллингов, CRM без скриптов не решается и идя по нему приходится наступать на кучу разных грабель. Помимо кодировки столкнулся еще с одной проблемой - выбирая сведения о клиенте в созданной заявке путем клика на ссылку "ID компании", в сводной статистке по нему я не получал ссылку на просмотр/редактирования профиля, а другим методом полный набор полей не посмотришь. Все оказалось тривиально - поле valid_id в таблице customer_user имеет умолчальное значение 0, что означает статус Недействителен. Таким образом OTRS считала всех пользователей созданных в базе скриптом портирования клиентов недействительными. Решение - принудительно устанавливать valid_id для каждого портируемого скриптом клиента в 1.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Проблема с кодировкой в базе OTRS

Сообщение alexus » 06 май 2014, 23:25

xpasha писал(а):Тема эта очень актуальная, гуглив по ней нашел сведения о том, что у людей возникают проблемы при работах с различными внешними базами данных и вообще портирование в OTRS из других источников принципиально отличающихся по структуре данных о клиенте системах типа биллингов, CRM без скриптов не решается и идя по нему приходится наступать на кучу разных грабель.
В разных системах системах разная структура данных по клиентам. Можно использовать стандартный механизм внешних бекендов OTRS, создав view-table во внешней базе. Но импорт в OTRS предпочтительнее, хотя зависит от объёма клиентов.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 07 май 2014, 10:49

Можно и так сделать, только с отделом расчетов у нас у нас отношения не то чтобы прямо такие радушные, и вьюшку то с данными для экспорта в OTRS писали не один месяц, а потом ошибки исправляли месяца два, у базы биллинга такая структура, что вьюшка получилась с трехэтажным запросом с кучей соотнесенных и вложенных запросов. Можно конечно было бы поковыряться самому и написать вьюшку пригодную для использования базы биллинга как бэкэнда, но это нужно знать структуру биллинговой базы и потратить кучу времени на клепание суперсложного запроса.
К тому же вьюшка при такой сложности запроса, который ее формирует работает довольно-таки медленно несмотря на неплохой сервак на котором крутится эта оракловая база. Лучше иметь локальную копию, которая будет работать быстро. :)

Не обошлось и без логических сложностей. В базе биллинга к одному лицевому счету можно привязать несколько услуг, суть строк в базе OTRS, поскольку на каждую услугу нужны сведения - ip, логин, пароль, адрес установки, телефон, данные по оборудованию(адрес, слот, порт). Я сделал id клиента его лицевым счетом, таким образом пришлось снять уникальность с поля customer_id во избежание коллизий. Таким образом у меня в базе клиентов данные по двум клиентам с одинаковым id, поиск находит только одну строку. Как сделать так, чтобы в поиске выдавались все варианты? Опять же при создании заявки также при поиске клиента выдается только один. Существует ли способ сделать поиск с выдачей двух вариантов стандартными средствами или нужно пилить код?
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Проблема с кодировкой в базе OTRS

Сообщение alexus » 07 май 2014, 12:48

Если у вас такая "красивая" база биллинга и такие админы, которые вьюшки месяцами пишут, то при чём тут OTRS :lol: ??!!
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 14 май 2014, 08:45

Произвел перенос изменений на рабочую инсталляцию OTRS. Все сработало ровно так же как и в случае тестовой инсталляции. У меня OTRS версии 3.3.4 и тестовая и рабочая. Указывать кодировку UTF-8 в конфиге OTRS нет необходимости, она установлена по умолчанию. Для нормальной работы перлового скрипта нужно указать опции после соединения с базой данных, которые я уже приводил ранее $dbh->{'mysql_enable_utf8'} = 1; $dbh->do('SET NAMES utf8'); Этого достаточно, чтобы вставка данных в базу MySQL производилась корректно. Строку default-character-set=utf8 в my.cnf также можно было не указывать, у меня сборка MySQL 5.1.71 в CentOS 6.5. Collation в базе также нормально работает utf8_general_ci, не знаю какие механизмы сравнения использует OTRS для поиска совпадений конструкции типа LIKE в MySQL запросах или перловые выражения, но поиск по части имени или адреса проходит корректно.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 14 май 2014, 08:52

Alexus, немного не понял сути сообщения. Я вообще-то не говорил ничего про то плоха OTRS или хороша. Была задача переноса данных из биллинга в OTRS. По ряду причин задача оказалась не простой. Причины и политические и внутрикорпоративные. Внутрикорпоративные это разделение зон ответственности, за биллинг ответственность несет отдел расчетов, им естественно нет никакого интереса давать нам доступ на запись, чтобы в случае чего не отдуваться за возможные косяки в работе биллинга гипотетически возникшие по нашей вине. Политические причины это дать нам доступ на запись в БД биллинга это признать свою некомпетентность и неспособность решать поставленные задачи. С них станется и того что вьюшку написали и то хорошо. Кроме того, уже описывалась главная сложность это несовместимость структуры данных хранящихся в биллинге и идеологии хранения данных о клиентах в OTRS. Поэтому организация всякого рода бэкэндов прямо в базе биллинга лишена смысла имхо.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

xpasha
OTRS Новобранец
Сообщения: 185
Зарегистрирован: 22 авг 2011, 12:30

Re: Проблема с кодировкой в базе OTRS

Сообщение xpasha » 14 май 2014, 10:27

Хотя сотрудников отдела расчетов нельзя назвать некрмпетентными, просто передача прав работы с биллингом на сторону может составить такое мнение о них у руководства. Дело также осложнилось вероятно тем фактом, что разработчики биллинга являясь сторонним предприятием обычно не очень то спешат делиться информацией о структуре базы своего продукта. Ну это так, отступление от темы уже.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая

Ответить