Проблема с кодировкой в базе OTRS
Модератор: ykolesnikov
Проблема с кодировкой в базе OTRS
Коллеги, помогите разобраться в чем дело. Конвертирую перловым скриптом данные по клиентам в базу 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. Скриншот прилагается.
В базе данные действительно в UTF8, прямой селект дает нормальные русские надписи при выводе в консоль где кодировка выставлена в UTF8. В вебе же видно кракозябры, как в phpmyadmin, так и в интерфейсе работы с пользователями-клиентами самого OTRS. Кодировка базы utf8_general_ci, в my.cnf присутствует строка default-character-set=utf8. Скриншот прилагается.
- Вложения
-
- Скриншот OTRS с кракозябрами.
- screen_otrs.jpg (362.76 КБ) 9549 просмотров
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
Re: Проблема с кодировкой в базе OTRS
В Апаче есть строка AddDefaultCharset UTF-8. В Defaults.pm строки SourceCharset => 'utf-8 и DestCharset => 'utf-8', только ничего не помогает, все равно кракозябры.
Если подсунуть сии строки со скриншота онлайн декодерам, то они успешно декодируются в читаемые, при этом декодеры утверждают, что была успешно проведена декодировка win-1251 в utf-8. То есть получается OTRS перекодирует utf-8 в win-1251, а обратная конверсия дает как раз нужный результат. Осталось лишь выяснить почему OTRS так делает.
Если подсунуть сии строки со скриншота онлайн декодерам, то они успешно декодируются в читаемые, при этом декодеры утверждают, что была успешно проведена декодировка 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 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
Re: Проблема с кодировкой в базе OTRS
Похоже разобрался. В перловом скрипте нужно было сделать следующие установки $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 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
Re: Проблема с кодировкой в базе OTRS
Спасибо, что отписались о решении!
Версия OTRS (6.0.10)
Debian 9 Stretch
Версия СУБД (MySQL 5.7.22)
Debian 9 Stretch
Версия СУБД (MySQL 5.7.22)
Re: Проблема с кодировкой в базе OTRS
Ну вопрос возможно еще не решен принципиально. С кодировкой все стало нормально, но проверить какие опции нужны, а какие нет и в какой части 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 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
-
- OTRS Гуру
- Сообщения: 5192
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 92 раза
- Поблагодарили: 82 раза
Re: Проблема с кодировкой в базе OTRS
В разных системах системах разная структура данных по клиентам. Можно использовать стандартный механизм внешних бекендов OTRS, создав view-table во внешней базе. Но импорт в OTRS предпочтительнее, хотя зависит от объёма клиентов.xpasha писал(а):Тема эта очень актуальная, гуглив по ней нашел сведения о том, что у людей возникают проблемы при работах с различными внешними базами данных и вообще портирование в OTRS из других источников принципиально отличающихся по структуре данных о клиенте системах типа биллингов, CRM без скриптов не решается и идя по нему приходится наступать на кучу разных грабель.
С уважением,
Алексей Юсов
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? Спросите меня как!
Алексей Юсов
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? Спросите меня как!
Re: Проблема с кодировкой в базе OTRS
Можно и так сделать, только с отделом расчетов у нас у нас отношения не то чтобы прямо такие радушные, и вьюшку то с данными для экспорта в OTRS писали не один месяц, а потом ошибки исправляли месяца два, у базы биллинга такая структура, что вьюшка получилась с трехэтажным запросом с кучей соотнесенных и вложенных запросов. Можно конечно было бы поковыряться самому и написать вьюшку пригодную для использования базы биллинга как бэкэнда, но это нужно знать структуру биллинговой базы и потратить кучу времени на клепание суперсложного запроса.
К тому же вьюшка при такой сложности запроса, который ее формирует работает довольно-таки медленно несмотря на неплохой сервак на котором крутится эта оракловая база. Лучше иметь локальную копию, которая будет работать быстро.
Не обошлось и без логических сложностей. В базе биллинга к одному лицевому счету можно привязать несколько услуг, суть строк в базе OTRS, поскольку на каждую услугу нужны сведения - ip, логин, пароль, адрес установки, телефон, данные по оборудованию(адрес, слот, порт). Я сделал id клиента его лицевым счетом, таким образом пришлось снять уникальность с поля customer_id во избежание коллизий. Таким образом у меня в базе клиентов данные по двум клиентам с одинаковым id, поиск находит только одну строку. Как сделать так, чтобы в поиске выдавались все варианты? Опять же при создании заявки также при поиске клиента выдается только один. Существует ли способ сделать поиск с выдачей двух вариантов стандартными средствами или нужно пилить код?
К тому же вьюшка при такой сложности запроса, который ее формирует работает довольно-таки медленно несмотря на неплохой сервак на котором крутится эта оракловая база. Лучше иметь локальную копию, которая будет работать быстро.
Не обошлось и без логических сложностей. В базе биллинга к одному лицевому счету можно привязать несколько услуг, суть строк в базе OTRS, поскольку на каждую услугу нужны сведения - ip, логин, пароль, адрес установки, телефон, данные по оборудованию(адрес, слот, порт). Я сделал id клиента его лицевым счетом, таким образом пришлось снять уникальность с поля customer_id во избежание коллизий. Таким образом у меня в базе клиентов данные по двум клиентам с одинаковым id, поиск находит только одну строку. Как сделать так, чтобы в поиске выдавались все варианты? Опять же при создании заявки также при поиске клиента выдается только один. Существует ли способ сделать поиск с выдачей двух вариантов стандартными средствами или нужно пилить код?
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
-
- OTRS Гуру
- Сообщения: 5192
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 92 раза
- Поблагодарили: 82 раза
Re: Проблема с кодировкой в базе OTRS
Если у вас такая "красивая" база биллинга и такие админы, которые вьюшки месяцами пишут, то при чём тут 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? Спросите меня как!
Алексей Юсов
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? Спросите меня как!
Re: Проблема с кодировкой в базе OTRS
Произвел перенос изменений на рабочую инсталляцию 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 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
Re: Проблема с кодировкой в базе OTRS
Alexus, немного не понял сути сообщения. Я вообще-то не говорил ничего про то плоха OTRS или хороша. Была задача переноса данных из биллинга в OTRS. По ряду причин задача оказалась не простой. Причины и политические и внутрикорпоративные. Внутрикорпоративные это разделение зон ответственности, за биллинг ответственность несет отдел расчетов, им естественно нет никакого интереса давать нам доступ на запись, чтобы в случае чего не отдуваться за возможные косяки в работе биллинга гипотетически возникшие по нашей вине. Политические причины это дать нам доступ на запись в БД биллинга это признать свою некомпетентность и неспособность решать поставленные задачи. С них станется и того что вьюшку написали и то хорошо. Кроме того, уже описывалась главная сложность это несовместимость структуры данных хранящихся в биллинге и идеологии хранения данных о клиентах в OTRS. Поэтому организация всякого рода бэкэндов прямо в базе биллинга лишена смысла имхо.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
Re: Проблема с кодировкой в базе OTRS
Хотя сотрудников отдела расчетов нельзя назвать некрмпетентными, просто передача прав работы с биллингом на сторону может составить такое мнение о них у руководства. Дело также осложнилось вероятно тем фактом, что разработчики биллинга являясь сторонним предприятием обычно не очень то спешат делиться информацией о структуре базы своего продукта. Ну это так, отступление от темы уже.
OTRS 3.3.4
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая
CentOS 6.5, MySQL 5.1.X
OTRS 3.3.6 тестовая