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

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

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

Asterisk 1.8.12.2 на debian 6, mysql 5.5.35-0+wheezy1 кодировка UTF-8 Unicode (utf8). База данных из которой тяну данные сравнение с utf8_general_ci, в таблице аналогичная кодировка. В 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 по прежнему идет знаками вопроса.

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

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

Добавлено: 13 июл 2014, 15:13
alexstat

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

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"

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

Добавлено: 13 июл 2014, 18:00
zzuz
Кодировки destinations ?

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

Добавлено: 13 июл 2014, 18:58
alexstat
Кодировка destinations- сравнение utf8_general_ci. Все поля так же сравнение с utf8_general_ci.

Asterisk работает из под root, т.к. тестовый.

В консоли из под root нормально отображает русский

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

mysql> select cat from advert where tel='7*******';
+--------------+
| cat          |
+--------------+
| Оля 6422    |
+--------------+
1 row in set (0.00 sec)

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

Добавлено: 13 июл 2014, 19:00
alexstat
Вытягиваю на страницы с помощью php из этой базы, без дополнительных настроек подключения сразу отображает русские буквы. а не знаки вопроса.

Искал настройки кодировки в odbc не нашел.

Решение проблемы

Добавлено: 13 июл 2014, 22:54
alexstat
Всем спасибо, кто принимал участие в решении проблемы.

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

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

Charset = utf8
Более подробный ответ:
http://lists.digium.com/pipermail/aster ... 76427.html

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

/etc/odbc.ini
[MySQL-asterisk]
Description = MySQL ODBC Driver
Driver = MySQL
Socket = /var/run/mysqld/mysqld.sock
Server = localhost
User = my_username
Password = my_password
Database = my_database
Option = 3
Port =
Charset = utf8