diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c
index 7fe7714644236de71373d9fd6e6b66365decbfcf..eaf6deac277555bea1260fd895874b8197c2f60a 100644
--- a/res/res_config_odbc.c
+++ b/res/res_config_odbc.c
@@ -137,13 +137,13 @@ static SQLHSTMT custom_prepare(struct odbc_obj *obj, void *data)
 	va_end(ap);
 
 	if (!ast_strlen_zero(cps->extra)) {
-		if (strchr(cps->extra, ';') || strchr(cps->extra, '^')) {
-			ENCODE_CHUNK(encodebuf, cps->extra);
-			SQLBindParameter(stmt, x++, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(encodebuf), 0, (void *)encodebuf, 0, NULL);
+		const char *newval = cps->extra;
+		if (strchr(newval, ';') || strchr(newval, '^')) {
+			ENCODE_CHUNK(encodebuf, newval);
+			ast_string_field_set(cps, encoding[x], encodebuf);
+			newval = cps->encoding[x];
 		} 
-		else {
-			SQLBindParameter(stmt, x++, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(cps->extra), 0, (void *)cps->extra, 0, NULL);
-		}
+		SQLBindParameter(stmt, x++, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(newval), 0, (void *)newval, 0, NULL);
 	}
 
 	return stmt;