Страница 1 из 1

MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских букв

Добавлено: 09 ноя 2015, 10:12
rus0n1c
Всем хорошего настроения!

Проблема следующая: Установлен и настроен Asterisk 13.6.0, сконфигурирована запись CDR в базу Mysql (5.6.25) через cdr_adaptive_odbc. unixODBC версии 2.3.4, libmysql последней доступной на сайте MySQL версии.
CallerID endpoint'ов в pjsip.conf записан по-русски в UTF-8. При совершении звонка в консоли Asterisk CallerID отображается как положено (русские буквы). При просмотре созданной записи о звонке в базе вижу, что CallerID записался как "Ð�ванов Ð�.Ð�."

Настройки:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: /etc/odbc.ini

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

[odbciniconn]
Trace=Yes
TraceFile=odbc.log
Description=MySQL Asterisk CDR Connector
Database=asteriskcdrdbsmk
Charset=utf8
Driver=MySQL
User=<пользователь>
Password=<пароль>
Server=localhost
Option=3
Socket=/var/run/mysqld/mysqld.sock
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: res_odbc.conf

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

[resodbconn]

enabled         = yes
dsn             = odbciniconn
username        = <пользователь>
password        = <пароль>
pre-connect     = yes
limit           = 1
sanitysql       = select 1
share_connections = yes
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: cdr_adaptive_odbc.conf

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

[cdr_adaptive_connection]

connection=resodbconn
table=cdr
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]

user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
init-connect = "SET NAMES utf8"
character-set-server = utf8
collation-server=utf8_general_ci

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 09 ноя 2015, 10:46
rus0n1c
Прошу прощения, случайно нажал "отправить".
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Настройки mysqk

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

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0,00 sec)
Сама база — тоже в UTF8.
Для теста проверил связку PostgreSQL + CDR (res_pgsql.conf). Всё пишется в базу по-русски.
Что я упустил?

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 09 ноя 2015, 12:31
awsswa
а формат баз utf8_general_ci ?

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 09 ноя 2015, 12:36
rus0n1c

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

mysql> use asteriskcdrdbsmk
Database changed
mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0,00 sec)
Да, как я понимаю.

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 09 ноя 2015, 14:47
rus0n1c
Проверил штатным isql, который идёт вместе с unixODBC. Руками обновил данные в таблице из ssh-консоли — данные обновились и отображаются верно (по-русски).
Такое впечатление, что сам asterisk посылает CDR-статистику в latin1 и из-за этого я и вижу кракозябры в базе.

Раньше, в res_config_mysql.conf можно было явно указать, в какой кодировке посылать данные в базу. Теперь cdr_mysql в статуе "deprecated" и рекомендуют использовать cdr_adaptive_odbc. Сколько ни гуглил, не нашёл, где теперь можно задать явно кодировку (в odbc.ini charset указан).

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 09 ноя 2015, 17:16
Glukinho
У меня ровно ваш конфиг работает нормально через UTF-8, только вместо PJSIP (и чего все на него лезут?) - SIP "старый", и версия астера 11.8.1. Единственное, что пришлось сделать - в odbc.ini вставить "Charset=utf8", но у вас это уже есть. Я бы проверил со "старым" SIP-стеком, если с ним все ок, то виновен новомодный PJSIP.

Ну и проверьте, что у вас все конфиги сохранены в utf-8.
И всякие другие хитрые источники (AGI? Сами IP-телефоны?) отдают в utf-8.

Re: MySQL 5.6 + cdr_adaptive_odbc=Кракозябры вместо русских

Добавлено: 10 ноя 2015, 08:15
rus0n1c
К сожалению, проверить на chan_sip возможности нет.
В принципе, вся возня с MySQL + cdr_adaptive_odbc затевалась из-за того, что разработчик адаптированной версии Asterisk CDR Viewer (который prog-it) заявлял, что оно работает только с MySQL-базами.
Опытным путём было установлено, что прекрасно работает и с PgSQL. Поэтому плюнул и переехал на Postgres.

Всем спасибо за ответы. Думаю, тему можно закрыть.