Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

odbc к mysql вместо русских букв знаки вопроса

1

Ситуация в следующем, в диалплан хочу вывести данные на русском языке из базы mysql через odbc.

Asterisk 1.8.12.2 на debian 6, mysql 5.5.35-0+wheezy1 кодировка UTF-8 Unicode (utf8). База данных из которой тяну данные сравнение с utf8generalci, в таблице аналогичная кодировка. В debian установлена так же utf8.

С настройками проблем нет: /etc/odbc.ini:

[asterisk-connector] Driver = MySQL Description = Connector/ODBC 3.51 Driver DSN Server = localhost Port = 3306 User = asterisk Password = ******** Database = asterisk Socket = /var/run/mysqld/mysqld.sock 

/etc/asterisk/res_odbc.conf:

[asterisk] enabled = yes dsn = asterisk-connector username = asterisk password = ******* pooling = no limit = 1 pre-connect = yes 

Сама функция в /etc/asterisk/func_odbc.conf:

[NAME] dsn=asterisk readsql=select name from destinations where prefix in (substr('${CALLERID(num)}',2,7),substr('${CALLERID(num)}',2,6),substr('${CALLERID(num)}',2,5),substr('${CALLERID(num)}',2,4),substr('${CALLERID(num)}',2,3)) order by length(prefix) DESC limit 1 

При использовании функции в диалплане:

exten => 84959898533,1,Set(CALLERID(name)=${ODBC_CODE()}) 

Вместо русского слова появляются знаки вопроса. Английский текс выдает корректно.

Решил, что это проблема идет в связки сервера, астериска. Попробовал решить.

Самое интересное, что на этом сервере, был сайт на русском языке, как я загрузил его на сервер вместо русского так же были знаки вопроса. Решил эту проблемы подавлением следующих строк в код php подсоединения к базе mysql:

mysqli_query($db_ad, "SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); mysqli_query($db_ad, "SET CHARACTER SET 'utf8'"); 

Естественно и в этот раз копать в эту сторону. В результате поиска в гугле добавил в файл /etc/mysql/my.cnf следующие строки:

[mysqld] init-connect="SET NAMES utf8" character-set-server=utf8 collation-server=utf8_general_ci 

После этого, сайт на русском стал отображаться без знаков вопроса (базы сайта и ту которую я пытаюсь использовать в одинаковых кодировках выше описанных) да же с законченными строками по настройки кодировке.

Сейчас на сервере по кодировкам, после редактирования настроек mysql имею следующую картину:

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/ | +--------------------------+----------------------------+ 

Но текст из БД по odbc по прежнему идет знаками вопроса.

root@Asterisk:~# locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= 

В файле /etc/locale.gen:

en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8 

/etc/asterisk/extensions.conf:

exten => _7XXXXXXXXXX,n,Set(CALLERID(name)=${ODBC_NAME()}) exten => _7XXXXXXXXXX,n,jabbersend(asterisk,******@jabber.ru, Звонок от ${CALLERID(name)}) 

Знаки вопросов появляются в консоли Asteriks и в jabber:

 Executing [7**********@incoming-youmagic:7] Set("SIP/youmagic-00000004", "CALLERID(name)=??? 6422") in new stack -- Executing [7*********@incoming-youmagic:8] JabberSend("SIP/youmagic-00000004", "asterisk,*****@jabber.ru, Звонок от ??? 6422 с номера <+7*********> в 15:08:39 2014-07-13 ") in new stack 

Соответственно "CALLERID(name)=??? 6422" должен быть "CALLERID(name)=Оля 6422"

Что делать ума не приложу, все уже перепробовал. Прошу Вашей помощи.

удалить закрыть спам изменить тег редактировать

спросил 2014-07-13 00:37:42 +0400

alexstat Gravatar alexstat
53 ● 5 ● 3 ● 8

обновил 2014-07-13 15:36:37 +0400

Comments

Всем спасибо, кто принимал участие в решении проблемы.

Все заработало- русские буквы снова стали русскими, а не знаками вопроса. Всего нужно было довавить одну строку в настройки /etc/odbc.ini: <code>Charset = utf8</code>

Более подробный ответ: http://lists.digium.com/pipermail/asterisk-users/2012-December/276427.html [code]/etc/odbc.ini [MySQL-asterisk] Description = MySQL ODBC Driver Driver = MySQL Socket = /var/run/mysqld/mysqld.sock Server = localhost User = myusername Password = mypassword Database = my_database Option = 3 Port = Charset = utf8[/code]

alexstat ( 2014-07-13 23:18:42 +0400 )редактировать

Будьте первым, кто ответит на этот вопрос!

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2014-07-13 00:37:42 +0400

Просмотрен: 3,944 раз

Обновлен: Jul 13 '14

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.