• unknown's avatar
    BUG#16217 forced to introduce a separate mysql client command to adopt its · e025e47a
    unknown authored
    internal charset to one associated with currently being handled query. 
    To note such a query can come from interactive client either.
    
    There was a discussion within replication team and Monty who's suggestion won.
    It avoids straightforward parsing of all `set' queries that could affect client side 
    character set. 
    According to the idea, mysql client does not parse `set' queries but rather cares of
    `charset new_cs_name' command.
    This command is generated by mysqlbinlog in form of exclaiming comment (Lars' suggestion)
    so that enlightened clients like `mysql' knows what to do with it.
    
    Interactive human can switch between many multi-byte charsets during the session 
    providing the command explicitly. 
    To note that setting new internal mysql's charset does not
    trigger sending any `SET' sql statement to the server. 
    
    
    client/mysql.cc:
      BUG#16217 revealed the problem of switching between charsets in mysql client.
      Such switching is necessary in a case when being scanned query consists of 
      multi-byte chars and internal charset was initialized differently. mysql finds 
      `/' escape and misiterprete it 
      while in fact one could be a part of a multi-byte symbol like the bug page reported. 
      
      This patch extends mysql `charset' command, '\C' shortcut.
    mysql-test/r/ctype_ucs_binlog.result:
      comment line generated by mysqlbinlog for processing of logs with multi-byte chars.
    mysql-test/r/mysql.result:
      results are altered due to #16217
    mysql-test/r/mysqlbinlog.result:
      Results are altered due to #16217
    mysql-test/r/mysqlbinlog2.result:
      commeted command for mysql client due to multi-byte binlog
    mysql-test/r/rpl_charset.result:
      commented command for mysql due to multi-byte binlogs
    mysql-test/r/rpl_timezone.result:
      commented command for mysql client due to multi-byte binlogs
    mysql-test/r/user_var-binlog.result:
      commented command for mysql client due to multi-byte binlogs
    mysql-test/t/mysql.test:
      Main test for mysql client is extended to check `charset' command.
    mysql-test/t/mysqlbinlog.test:
      Checking how /*! \C cs_name */ are added to the output of mysqlbinlog.
      The exclaiming comment is for further processing by mysql client.
      The added part mimics the failure to recover tables from binlog - see BUG#16217.
    sql/log_event.cc:
      Sending into output instructions for mysql client to switch internally 
      to appropriate charset.
      mysql client is supposed to be invoked with --default-character-set=
      "to default character set of the server created the binlog".
    e025e47a
mysqlbinlog.test 4.78 KB