mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
added function mysql_set_character_set (reviewed by Monty)
as a work around for #8317 and #9637 This function sends SET NAMES command and changes mysql->charset so mysql_real_escape_string will work as expected.
This commit is contained in:
@ -1509,6 +1509,36 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql)
|
|||||||
return mysql->charset->csname;
|
return mysql->charset->csname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name)
|
||||||
|
{
|
||||||
|
struct charset_info_st *cs;
|
||||||
|
const char *save_csdir = charsets_dir;
|
||||||
|
|
||||||
|
if (mysql->options.charset_dir)
|
||||||
|
charsets_dir = mysql->options.charset_dir;
|
||||||
|
|
||||||
|
if ( (cs = get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0))) )
|
||||||
|
{
|
||||||
|
char buff[MY_CS_NAME_SIZE + 10];
|
||||||
|
charsets_dir = save_csdir;
|
||||||
|
sprintf(buff, "SET NAMES %s", cs_name);
|
||||||
|
if (!mysql_query(mysql, buff)) {
|
||||||
|
mysql->charset = cs;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
char cs_dir_name[FN_REFLEN];
|
||||||
|
get_charsets_dir(cs_dir_name);
|
||||||
|
mysql->net.last_errno=CR_CANT_READ_CHARSET;
|
||||||
|
strmov(mysql->net.sqlstate, unknown_sqlstate);
|
||||||
|
my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error)-1,
|
||||||
|
ER(mysql->net.last_errno),
|
||||||
|
cs_name,
|
||||||
|
cs_dir_name);
|
||||||
|
|
||||||
|
}
|
||||||
|
charsets_dir = save_csdir;
|
||||||
|
return mysql->net.last_errno;
|
||||||
|
}
|
||||||
|
|
||||||
uint STDCALL mysql_thread_safe(void)
|
uint STDCALL mysql_thread_safe(void)
|
||||||
{
|
{
|
||||||
|
@ -146,4 +146,5 @@ EXPORTS
|
|||||||
mysql_rpl_query_type
|
mysql_rpl_query_type
|
||||||
mysql_slave_query
|
mysql_slave_query
|
||||||
mysql_embedded
|
mysql_embedded
|
||||||
|
mysql_set_character_set
|
||||||
get_defaults_files
|
get_defaults_files
|
||||||
|
Reference in New Issue
Block a user