Commit d3ff1c2f authored by unknown's avatar unknown

Bug#15276: MySQL ignores collation-server

    Problem:
    mysqld --collation-server=xxx --character-set-server=yyy
    didn't work as expected: collation_server was set not to xxx,
    but to the default collation of character set "yyy".
    
    With different argument order it worked as expected:
    mysqld --character-set-server=yyy --collation-server=yyy 
    
    Fix:
    initializate default_collation_name to 0
    when processing --character-set-server
    only if --collation-server has not been specified
    in command line.



mysql-test/r/ctype_ucs2_def.result:
  Adding test case
mysql-test/t/ctype_ucs2_def-master.opt:
  Specifying variables in reverse order, to cover the bug.
mysql-test/t/ctype_ucs2_def.test:
  Adding test case
sql/mysqld.cc:
  Don't clear default_collation_name when processing 
      --character-set-server if collation has already
      been specified using --collation-server
parent 446f03bd
show variables like 'collation_server';
Variable_name Value
collation_server ucs2_unicode_ci
show variables like "%character_set_ser%"; show variables like "%character_set_ser%";
Variable_name Value Variable_name Value
character_set_server ucs2 character_set_server ucs2
......
--default-character-set=ucs2 --default-collation=ucs2_unicode_ci --default-collation=ucs2_unicode_ci --default-character-set=ucs2
#
# MySQL Bug#15276: MySQL ignores collation-server
#
show variables like 'collation_server';
# #
# Bug#18004 Connecting crashes server when default charset is UCS2 # Bug#18004 Connecting crashes server when default charset is UCS2
# #
......
...@@ -323,6 +323,7 @@ static char *default_character_set_name; ...@@ -323,6 +323,7 @@ static char *default_character_set_name;
static char *character_set_filesystem_name; static char *character_set_filesystem_name;
static char *my_bind_addr_str; static char *my_bind_addr_str;
static char *default_collation_name; static char *default_collation_name;
static char compiled_default_collation_name[]= MYSQL_DEFAULT_COLLATION_NAME;
static char mysql_data_home_buff[2]; static char mysql_data_home_buff[2];
static struct passwd *user_info; static struct passwd *user_info;
static I_List<THD> thread_cache; static I_List<THD> thread_cache;
...@@ -6389,7 +6390,7 @@ static void mysql_init_variables(void) ...@@ -6389,7 +6390,7 @@ static void mysql_init_variables(void)
/* Variables in libraries */ /* Variables in libraries */
charsets_dir= 0; charsets_dir= 0;
default_character_set_name= (char*) MYSQL_DEFAULT_CHARSET_NAME; default_character_set_name= (char*) MYSQL_DEFAULT_CHARSET_NAME;
default_collation_name= (char*) MYSQL_DEFAULT_COLLATION_NAME; default_collation_name= compiled_default_collation_name;
sys_charset_system.value= (char*) system_charset_info->csname; sys_charset_system.value= (char*) system_charset_info->csname;
character_set_filesystem_name= (char*) "binary"; character_set_filesystem_name= (char*) "binary";
...@@ -6551,7 +6552,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -6551,7 +6552,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
strmake(mysql_home,argument,sizeof(mysql_home)-1); strmake(mysql_home,argument,sizeof(mysql_home)-1);
break; break;
case 'C': case 'C':
default_collation_name= 0; if (default_collation_name == compiled_default_collation_name)
default_collation_name= 0;
break; break;
case 'l': case 'l':
opt_log=1; opt_log=1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment