Asterisk-CDR-Viewer-Mod
Asterisk-CDR-Viewer-Mod copied to clipboard
Крякозябры вместо русского Callerid(name)
Использую mariadb, в etc/odbc.ini charset=utf8, /etc/my.cnf тоже настроила. Если вводить русский текст из веб-интерфейса в поле комментария, все ок, в базе из командной строки тоже хорошо отображается. А если из имени абонента- крякозябры, хотя на самом телефоне (Cisco) правильно русский отображает, когда звонок приходит. CentOS 7. Где еще копать?
[mysqld]
...
character-set-server=utf8
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
[client]
# default-character-set is a client option, not a server option
default-character-set=utf8
[mysql]
default-character-set=utf8
Раз поле комментарий корректно отображается и сохраняется, значит существующие записи в базе не в utf8 кодировке.
Попробуйте в конфиге раскомментировать строку PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'. Если опять будут отображаться крякозябры, то приведите ее к виду: PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES cp1251'. Как после этого будет отображаться...
На одном нашем форуме нашла, что есть библиотека для юникода, а есть для анси. Обновила коннектор. Но с новым коннектором и библиотекой Астер начал вылетать, работал только когда отключала odbc соединение с базой. А так в базе появились пару раз записи нормальныe, но дублировались. Искала ошибки. Поставила из rpm самую последнюю версию базы MariaDB, ставила разные версии unixODBC. Наконец по логам докопала, что нет одной очень важной библиотеки linux-vsdo.so.1. Нет чтобы до завтра подождать. Вроде она должна быть в составе glibc. Переустановлю, думаю. Короче, никогда нельзя это делать: Rpm -ev --nodeps glibc* (не важно, какая текущая версия). После этого перестают выполняться все команды!!!! Включая установку пакетов yum. Т.к. нет еще библиотеки. Буду завтра линксоидов дергать, восстановить то надо, а то виртуалку с нуля ставить. У вас раскомментировала ранее, в базе тоже все в ютф8 перевела, правда только изучаю. Да, в 1251 бы попробовать... эх... пока восстановиться надо. Изучаю.
Debian: 9 (64 bit) MariaDB: 10.1.23-MariaDB-9+deb9u1 PHP: 7.0.19-1 Asterisk: 13.14.1~dfsg-2
Тоже бÑла пÑоблема Ñ Ð¾ÑобÑажением киÑиллиÑÑ Ð² ÑÑолбÑе "CallerID". ÐапÑимеÑ: вмеÑÑо - "аппаÑÐ°Ñ Grandstream" вÑводилоÑÑ - "ðÿÿðÃâ¬Ã°Ãâ Grandstream"
РеÑил пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÐºÐ¾ÑÑекÑиÑовкой Ñайла "/etc/asterisk/cdr_mysql.conf":
[global]
hostname=localhost ; ip адÑÐµÑ Ð³Ð´Ðµ ÑаÑполагаеÑÑÑ ÑеÑÐ²ÐµÑ MySQL
dbname=asteriskcdrdb ; название Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
где бÑдÑÑ Ñ
ÑаниÑÑÑÑ cdr
table=cdr ; название ÑаблиÑÑ
password=&&&&&&& ; паÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ asteriskuser
user=asteriskcdr ; Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
charset=utf8mb4
Ðаменил "charset=utf8" на "charset=utf8mb4".
Спасибо! Попробую когда до сервера доберусь. Даже не думала, что такой вариант есть.
Странно, несколько дней было нормально. Сейчас опять крякозябры заносит в БД. По настроению как-то о_0

Сегодня, 02.08.2017 не меняя настроек совершил пару тестовых звонков:
мистика, но в БД CallerID занеслось корректно.
Не понятно как так может быть, один день нормально всё, в другой - крякозябры :)
Должно работать. Коннектор ODBC MariaDB 3.0.2. (с родным коннектором MySQL не проверяла), Asterisk 15.1.3. Сама MariaDB тоже самой последней версии, для её установки настроить репозиторий в соответствии с http://downloads.mariadb.org/mariadb/repositories/ . Иначе в CentOS 7 ставится версия 5.5. Файл /etc/my.cnf Переводим всю базу на utf8mb4 (расширенный UTF8). При изменениях в уже существующей базе перекодировать данные в utf8mb4. При создании таблицы cdr тоже должна быть эта кодировка. Для нормальной скорости работы базы данных желательно, чтобы внутри бд не нужно было ничего перекодировать. Может что-то лишнее, но главное, что работает и не вылетает. Перегрузить сервис mariadb.
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
explicit_defaults_for_timestamp = 1 # для выключения Timestamp сообщения, может помочь
character-set-client-handshake = 0
init_connect = 'SET character_set_system = utf8mb4'
init_connect = 'SET character_set_connection = utf8mb4'
init_connect = 'SET character_set_database = utf8mb4'
init_connect = 'SET character_set_results = utf8mb4'
init_connect = 'SET collation_database = utf8mb4_unicode_ci'
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'
init_connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Команда для проверки кодировок в базе данных. После перезагрузок Linux и сервисов все должно быть как здесь.
MariaDB [(none)]> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+-------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
В /etc/odbc.ini
....
UseUnicode=True
Почитать еще https://invisionbyte.ru/docs1/general/hosting/perehod-s-utf8-na-utf8mb4-v-mysql-r43/ Не проверяла.
ÐналогиÑÐ½Ð°Ñ ÑиÑÑаÑиÑ. Debian 9, Asterisk 13, в cdr_mysql.conf пÑопиÑано charset=utf8mb4. СпеÑва ноÑмалÑно, ÑеÑез паÑÑ Ð´Ð½ÐµÐ¹ - кÑакозÑбÑÑ. РеÑил коÑÑÑлем, добавив в кÑон на каждÑе 10 мин запÑÑк /usr/sbin/asterisk -rx 'reload cdr_mysql.so'
Поставьте 15 версию, подключите как сейчас рекомендуется - через unixODBC. Сделайте как я делала: база данных — последняя версия MariaDB, коннектор родной от MariaDB. cdr_mysql.conf недостаточно, это вы кодировку только со стороны Астериска настроили, но база сама скорее всего в другой кодировке. /etc/my.cnf - настраивали?
ÐабÑла. Ð ÑкÑипÑе ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑй Ð¸Ð´ÐµÑ Ð² ÑÑом аÑÑ
иве Ñо ÑÑаÑиÑÑикой, поменÑÑÑ utf8 на utf8mb4. РавÑоÑÑ Ð¿ÑоÑÑба Ð´Ð»Ñ ÑÑÑÑкого Ñак ÑделаÑÑ.
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑоек кодиÑовки ÑолÑко Ð´Ð»Ñ MariaDB веÑÑии 10.3 менÑÑÑ Ð½Ðµ /etc/my.cnf, а vim /etc/my.cnf.d/server.cnf. Ðо ÑÑо акÑÑалÑно ÑолÑко еÑли неÑколÑко ÑазнÑÑ Ð±Ð°Ð·.
Также при использовании базы MariaDB последнюю часть создания триггера чуть изменить (THEN... объединить с предыдущей строкой, чтобы MariaDB восприняла команду:
DROP TRIGGER IF EXISTS `t_cdr`;
DELIMITER //
CREATE TRIGGER `t_cdr` BEFORE INSERT ON `cdr`
FOR EACH ROW BEGIN
IF ((NEW.dst = 's' OR NEW.dst = '~~s~~') AND NEW.realdst != '') THEN SET NEW.dst = NEW.realdst;
END IF;
END
//
DELIMITER ;
Аналогичная проблема, только с базой cel - в БД отображаются данные в кодировке ISO-8859-1, хотя везде настроена utf-8.
- Насколько я понимаю, utf8 это алиас на utf8mb4, т.к. последняя уже везде используется де факто. Так что нет особого смысла писать utf8mb4 вместо utf8
- Почему вы вносите настройки в файл cdr_mysql.conf Это же устаревший модуль. И вы сами пишете, что используете unixODBC, который настраивается через cel_odbc.conf или cdr_adaptive_odbc.conf в случае с cdr.
В любом случае, проблема сохраняется после выполнения всех рекомендаций. Использую коннектор от mysql.

СмоÑÑиÑе Ñо ÑÑо Ñ Ð¿Ð¸Ñала. ÐÑоÑеÑÑиÑована ÑÐ²ÐµÐ¶Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Asterisk, пÑавда 15 веÑки, а не 16. Ð¡Ð°Ð¼Ð°Ñ ÑÐ²ÐµÐ¶Ð°Ñ Ð²ÐµÑÑÐ¸Ñ MariaDB, ÑамÑй Ñвежий коннекÑÐ¾Ñ Ð¾Ñ Ñамой MariaDB (Ñ Ð¸Ñ Ð¶Ðµ ÑайÑа ÑкаÑивала), unixODBC из иÑÑ Ð¾Ð´Ð½Ð¸ÐºÐ¾Ð² Ñакже ÑамÑй ÑвеженÑкий. ÐÑе пÑекÑаÑно ÑабоÑаеÑ. Также cel добавлÑла. ÐÐ¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ñоблем Ñ ÑÑÑÑким.
-ÐоÑÐµÐ¼Ñ Ð²Ñ Ð²Ð½Ð¾ÑиÑе наÑÑÑойки в Ñайл cdr_mysql.conf ÐÑо же ÑÑÑаÑевÑий модÑлÑ. ÐÑо дÑÑÐ³Ð¾Ð¼Ñ Ð°Ð²ÑоÑÑ. Я не иÑполÑзÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ.
-ÐналогиÑÐ½Ð°Ñ ÑиÑÑаÑиÑ. -Debian 9, Asterisk 13, в cdr_mysql.conf пÑопиÑано charset=utf8mb4. ÐÑо необÑзаÑелÑно. Ðо-пеÑвÑÑ , надо иÑполÑзоваÑÑ odbc, во-вÑоÑÑÑ , Ñо ÑÑоÑÐ¾Ð½Ñ Asterisk пиÑем utf8. utf8mb4 ÑказÑваем в конÑигÑÑаÑионном Ñайле/ÑÐ°Ð¹Ð»Ð°Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ - либо ÑÑÑ /etc/my.cnf , либо конÑигÑÑаÑÐ¸Ñ ÑазнеÑена на неÑколÑко Ñайлов:
# ls /etc/my.cnf.d
enable_encryption.preset mysql-clients.cnf server.cnf
У Ð¼ÐµÐ½Ñ ÐºÐ¾Ð½Ñига MariaDB в /etc/my.cnf. ÐÑли бÑдеÑе ÑмоÑÑеÑÑ ÑÑÐ¾Ñ Ñайл, Ñам ÑÑÑлка на ÑÐ°Ð¹Ð»Ñ Ð¸Ð· каÑалога /etc/my.cnf.d
ÐдеÑÑ ÑеÑение полноÑÑÑÑ ÑабоÑее. ÐÑжна пÑоÑÑо внимаÑелÑноÑÑÑ Ð¸ ÑÑидÑивоÑÑÑ. ÐÑовеÑÑÑе в базе кодиÑовкÑ.
В базе везде utf8, так что решение мне не подошло) В конфигах тоже везде utf8.
Тем не менее, смена драйвера на ANSI решило проблему. Но это странно, ведь у меня везде должен быть уникод, а не latin. И вывод SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; это подтверждает

Можно поинтересоваться у вас, какая библиотека указана в качестве драйвера в конфигурации odbc? Я использовал юникодовскую libmyodbc8w, но символы стали отображаться корректно только с ANSI либой libmyodbc8a
Кроме этой /usr/lib64/libmaodbc.so больше ничего. Качайте этот коннектор с сайта MariaDB. У вас какая база данных? Может не MariaDB? Тогда я не тестировала. https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.1.0/ конкретнее он mariadb-connector-odbc-3.1.0-rc-rhel7-x86_64.tar.gz (у меня CentOS 7). Аналогично для Debian. Остальные коннекторы не нужны.
Мария, но мне было лениво собирать и я установил последний коннектор из репы Mysql. Окей, попробую родной, спасибо.
Вам собирать ничего не надо. mariadb-connector-odbc-3.1.0-rc-src.tar.gz - да, тут исходники, но это надо только если для какого-то своего дистриба собирать, а для стандартного RHEL,CentOS,Debian - для них все готово, в архивах уже .so, который просто перекопировать в общий каталог где другие .so.
Тогда все еще проще. Спасибо еще раз
А где именно собранную либу можно взять? В mariadb-connector-odbc-3.1.0-rc-src.tar.gz нет .so файлов
Я же писала выше - тут разные версии: https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.1.0/ конкретнее он mariadb-connector-odbc-3.1.0-rc-rhel7-x86_64.tar.gz (у меня CentOS 7). Аналогично для Debian.
Поставила CentOS 8. Пока что для нее надо компилировать коннектор MariaDB из кода git, т.к. версия от RHEL7 не работает.