Commit d3ff1c2f authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
show variables like 'collation_server';
Variable_name	Value
collation_server	ucs2_unicode_ci
show variables like "%character_set_ser%";
Variable_name	Value
character_set_server	ucs2
+1 −1
Original line number Diff line number Diff line
--default-character-set=ucs2 --default-collation=ucs2_unicode_ci
--default-collation=ucs2_unicode_ci --default-character-set=ucs2
+5 −0
Original line number Diff line number Diff line
#
# MySQL Bug#15276: MySQL ignores collation-server
#
show variables like 'collation_server';

#
# Bug#18004 Connecting crashes server when default charset is UCS2
#
+4 −2
Original line number Diff line number Diff line
@@ -323,6 +323,7 @@ static char *default_character_set_name;
static char *character_set_filesystem_name;
static char *my_bind_addr_str;
static char *default_collation_name;
static char compiled_default_collation_name[]= MYSQL_DEFAULT_COLLATION_NAME;
static char mysql_data_home_buff[2];
static struct passwd *user_info;
static I_List<THD> thread_cache;
@@ -6389,7 +6390,7 @@ static void mysql_init_variables(void)
  /* Variables in libraries */
  charsets_dir= 0;
  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;
  character_set_filesystem_name= (char*) "binary";

@@ -6551,6 +6552,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
    strmake(mysql_home,argument,sizeof(mysql_home)-1);
    break;
  case 'C':
    if (default_collation_name == compiled_default_collation_name)
      default_collation_name= 0;
    break;
  case 'l':