Commit eebe37d0 authored by unknown's avatar unknown
Browse files

Bug#7192 Specify --with-collation doesn't work for connections?

--with-collation worked only on the server side.
Client side ignored this argument, so collation_connection
was not properly set (remained latin1_swedish_ci).


sql-common/client.c:
  - Take into account MYSQL_DEFAULT_COLLATION_NAME if
  character set is not set using mysql_option(), to
  honor --with-collation argument to configure.
  - Use default collation for the character set when it's
  not set using mysql_option().
parent 618bd69d
Loading
Loading
Loading
Loading
+31 −2
Original line number Diff line number Diff line
@@ -1543,11 +1543,18 @@ C_MODE_START
int mysql_init_character_set(MYSQL *mysql)
{
  NET		*net= &mysql->net;
  const char *default_collation_name;
  
  /* Set character set */
  if (!mysql->options.charset_name &&
      !(mysql->options.charset_name= 
  if (!mysql->options.charset_name)
  {
    default_collation_name= MYSQL_DEFAULT_COLLATION_NAME;
    if (!(mysql->options.charset_name= 
       my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME))))
    return 1;
  }
  else
    default_collation_name= NULL;
  
  {
    const char *save= charsets_dir;
@@ -1555,6 +1562,28 @@ int mysql_init_character_set(MYSQL *mysql)
      charsets_dir=mysql->options.charset_dir;
    mysql->charset=get_charset_by_csname(mysql->options.charset_name,
                                         MY_CS_PRIMARY, MYF(MY_WME));
    if (mysql->charset && default_collation_name)
    {
      CHARSET_INFO *collation;
      if ((collation= 
           get_charset_by_name(default_collation_name, MYF(MY_WME))))
      {
        if (!my_charset_same(mysql->charset, collation))
        {
          my_printf_error(ER_UNKNOWN_ERROR, 
                         "COLLATION %s is not valid for CHARACTER SET %s",
                         MYF(0),
                         default_collation_name, mysql->options.charset_name);
          mysql->charset= NULL;
        }
        else
        {
          mysql->charset= collation;
        }
      }
      else
        mysql->charset= NULL;
    }
    charsets_dir= save;
  }