aboutsummaryrefslogtreecommitdiffstats
path: root/addons/app_mysql.c
diff options
context:
space:
mode:
authorespiceland <espiceland@f38db490-d61c-443f-a65b-d21fe96a405b>2010-10-08 16:27:31 +0000
committerespiceland <espiceland@f38db490-d61c-443f-a65b-d21fe96a405b>2010-10-08 16:27:31 +0000
commit463cc4021f68debfda850e87e93deb1a3a55b59e (patch)
tree7e2be6d96f7661f8a3212c3ff8e92c13387ab524 /addons/app_mysql.c
parentbccb73bf04041afbc4d4b7026ab6e9b3bc1f2f16 (diff)
Add option to res_config_mysql and app_mysql to specify a character set that
MySQL should use. (closes issue 17948) Reported by qmax. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@290939 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'addons/app_mysql.c')
-rw-r--r--addons/app_mysql.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/addons/app_mysql.c b/addons/app_mysql.c
index 0b1b58f04..b65b5bb93 100644
--- a/addons/app_mysql.c
+++ b/addons/app_mysql.c
@@ -57,10 +57,10 @@ static const char descrip[] =
"Syntax:\n"
" MYSQL(Set timeout <num>)\n"
" Set the connection timeout, in seconds.\n"
-" MYSQL(Connect connid dhhost dbuser dbpass dbname)\n"
+" MYSQL(Connect connid dhhost dbuser dbpass dbname [dbcharset])\n"
" Connects to a database. Arguments contain standard MySQL parameters\n"
-" passed to function mysql_real_connect. Connection identifer returned\n"
-" in ${connid}\n"
+" passed to function mysql_real_connect. Optional parameter dbcharset\n"
+" defaults to 'latin1'. Connection identifer returned in ${connid}\n"
" MYSQL(Query resultid ${connid} query-string)\n"
" Executes standard MySQL query contained in query-string using established\n"
" connection identified by ${connid}. Result of query is stored in ${resultid}.\n"
@@ -80,7 +80,7 @@ static const char descrip[] =
/*
EXAMPLES OF USE :
-exten => s,2,MYSQL(Connect connid localhost asterisk mypass credit)
+exten => s,2,MYSQL(Connect connid localhost asterisk mypass credit utf8)
exten => s,3,MYSQL(Query resultid ${connid} SELECT username,credit FROM credit WHERE callerid=${CALLERIDNUM})
exten => s,4,MYSQL(Fetch fetchid ${resultid} datavar1 datavar2)
exten => s,5,GotoIf(${fetchid}?6:8)
@@ -315,6 +315,7 @@ static int aMYSQL_connect(struct ast_channel *chan, char *data)
AST_APP_ARG(dbuser);
AST_APP_ARG(dbpass);
AST_APP_ARG(dbname);
+ AST_APP_ARG(dbcharset);
);
MYSQL *mysql;
int timeout;
@@ -322,7 +323,7 @@ static int aMYSQL_connect(struct ast_channel *chan, char *data)
AST_NONSTANDARD_APP_ARGS(args, data, ' ');
- if (args.argc != 6) {
+ if (args.argc < 6) {
ast_log(LOG_WARNING, "MYSQL_connect is missing some arguments\n");
return -1;
}
@@ -336,6 +337,14 @@ static int aMYSQL_connect(struct ast_channel *chan, char *data)
if (ctimeout && sscanf(ctimeout, "%30d", &timeout) == 1) {
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (void *)&timeout);
}
+ if(args.dbcharset && strlen(args.dbcharset) > 2){
+ char set_names[255];
+ char statement[512];
+ snprintf(set_names, sizeof(set_names), "SET NAMES %s", args.dbcharset);
+ mysql_real_escape_string(mysql, statement, set_names, sizeof(set_names));
+ mysql_options(mysql, MYSQL_INIT_COMMAND, set_names);
+ mysql_options(mysql, MYSQL_SET_CHARSET_NAME, args.dbcharset);
+ }
if (! mysql_real_connect(mysql, args.dbhost, args.dbuser, args.dbpass, args.dbname, 0, NULL,
#ifdef CLIENT_MULTI_STATEMENTS