From: Date: February 9 2006 3:23pm Subject: bk commit into 5.0 tree (aelkin:1.2034) BUG#16217 List-Archive: http://lists.mysql.com/commits/2369 X-Bug: 16217 Message-Id: <200602091423.k19ENH7c019039@dsl-hkigw8-feb0de00-199.dhcp.inet.fi> Below is the list of changes that have just been committed into a local 5.0 repository of elkin. When elkin does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet 1.2034 06/02/09 16:23:09 aelkin@stripped +11 -0 BUG#16217 forced to introduce a separate mysql client command to adopt its 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. sql/log_event.cc 1.202 06/02/09 16:23:04 aelkin@stripped +5 -0 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". mysql-test/t/mysqlbinlog.test 1.23 06/02/09 16:23:04 aelkin@stripped +18 -1 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. mysql-test/t/mysql.test 1.5 06/02/09 16:23:04 aelkin@stripped +13 -0 Main test for mysql client is extended to check `charset' command. mysql-test/r/user_var-binlog.result 1.6 06/02/09 16:23:04 aelkin@stripped +1 -0 commented command for mysql client due to multi-byte binlogs mysql-test/r/rpl_timezone.result 1.14 06/02/09 16:23:04 aelkin@stripped +1 -0 commented command for mysql client due to multi-byte binlogs mysql-test/r/rpl_charset.result 1.21 06/02/09 16:23:04 aelkin@stripped +8 -0 commented command for mysql due to multi-byte binlogs mysql-test/r/mysqlbinlog2.result 1.9 06/02/09 16:23:03 aelkin@stripped +33 -0 commeted command for mysql client due to multi-byte binlog mysql-test/r/mysqlbinlog.result 1.20 06/02/09 16:23:03 aelkin@stripped +24 -1 Results are altered due to #16217 mysql-test/r/mysql.result 1.5 06/02/09 16:23:03 aelkin@stripped +10 -0 results are altered due to #16217 mysql-test/r/ctype_ucs_binlog.result 1.5 06/02/09 16:23:03 aelkin@stripped +1 -0 comment line generated by mysqlbinlog for processing of logs with multi-byte chars. client/mysql.cc 1.195 06/02/09 16:23:03 aelkin@stripped +25 -1 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. # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: aelkin # Host: dsl-hkigw8-feb0de00-199.dhcp.inet.fi # Root: /usr_rh9/home/elkin.rh9/MySQL/FIXES/5.0-bug16217 --- 1.194/client/mysql.cc 2005-12-27 15:56:46 +02:00 +++ 1.195/client/mysql.cc 2006-02-09 16:23:03 +02:00 @@ -194,7 +194,7 @@ com_connect(String *str,char*), com_status(String *str,char*), com_use(String *str,char*), com_source(String *str, char*), com_rehash(String *str, char*), com_tee(String *str, char*), - com_notee(String *str, char*), + com_notee(String *str, char*), com_charset(String *str,char*), com_prompt(String *str, char*), com_delimiter(String *str, char*), com_warnings(String *str, char*), com_nowarnings(String *str, char*); @@ -268,6 +268,8 @@ "Set outfile [to_outfile]. Append everything into given outfile." }, { "use", 'u', com_use, 1, "Use another database. Takes database name as argument." }, + { "charset", 'C', com_charset, 1, + "Switch to another charset. Might be needed for processing binlog with multi-byte charsets." }, { "warnings", 'W', com_warnings, 0, "Show warnings after every statement." }, { "nowarning", 'w', com_nowarnings, 0, @@ -1909,6 +1911,28 @@ return 0; } + /* ARGSUSED */ +static int +com_charset(String *buffer __attribute__((unused)), char *line) +{ + char buff[256], *param; + CHARSET_INFO * new_cs; + strmake(buff, line, sizeof(buff) - 1); + param= get_arg(buff, 0); + if (!param || !*param) + { + return put_info("Usage: \\C char_setname | charset charset_name", + INFO_ERROR, 0); + } + new_cs= get_charset_by_csname(param, MY_CS_PRIMARY, MYF(MY_WME)); + if (new_cs) + { + charset_info= new_cs; + put_info("Charset changed", INFO_INFO); + } + else put_info("Charset is not found", INFO_INFO); + return 0; +} /* Execute command --- 1.201/sql/log_event.cc 2006-01-06 18:36:08 +02:00 +++ 1.202/sql/log_event.cc 2006-02-09 16:23:04 +02:00 @@ -1551,6 +1551,11 @@ } if (unlikely(bcmp(print_event_info->charset, charset, 6))) { + CHARSET_INFO *cs_info= get_charset(uint2korr(charset), MYF(MY_WME)); + if (cs_info) + { + fprintf(file, "/*!\\C %s */;\n", cs_info->csname); /* for mysql client */ + } fprintf(file,"SET " "@@session.character_set_client=%d," "@@session.collation_connection=%d," --- 1.13/mysql-test/r/rpl_timezone.result 2006-01-24 09:30:47 +02:00 +++ 1.14/mysql-test/r/rpl_timezone.result 2006-02-09 16:23:04 +02:00 @@ -48,6 +48,7 @@ SET TIMESTAMP=100000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (t timestamp); SET TIMESTAMP=100000000; --- 1.19/mysql-test/r/mysqlbinlog.result 2006-01-24 09:30:46 +02:00 +++ 1.20/mysql-test/r/mysqlbinlog.result 2006-02-09 16:23:03 +02:00 @@ -20,6 +20,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; drop table if exists t1,t2; SET TIMESTAMP=1000000000; @@ -50,6 +51,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values ("Alas"); # End of log file @@ -72,6 +74,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values ("Alas"); # End of log file @@ -86,6 +89,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; drop table if exists t1,t2; SET TIMESTAMP=1000000000; @@ -116,6 +120,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values ("Alas"); # End of log file @@ -138,6 +143,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values ("Alas"); # End of log file @@ -166,4 +172,21 @@ # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; -drop table t1, t2; +flush logs; +create table t3 (f text character set utf8); +create table t4 (f text character set cp932); +flush logs; +rename table t3 to t03, t4 to t04; +select HEX(f) from t03; +HEX(f) +E382BD +select HEX(f) from t3; +HEX(f) +E382BD +select HEX(f) from t04; +HEX(f) +835C +select HEX(f) from t4; +HEX(f) +835C +drop table t1, t2, t03, t04, t3, t4; --- 1.22/mysql-test/t/mysqlbinlog.test 2006-01-24 09:30:47 +02:00 +++ 1.23/mysql-test/t/mysqlbinlog.test 2006-02-09 16:23:04 +02:00 @@ -107,7 +107,24 @@ --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --exec $MYSQL_BINLOG --short-form --position=79 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001 +# Bug#16217 (mysql client did not know how not switch its internal charset) +flush logs; +create table t3 (f text character set utf8); +create table t4 (f text character set cp932); +--exec $MYSQL --default-character-set=utf8 test -e "insert into t3 values(_utf8'ソ')" +--exec $MYSQL --default-character-set=cp932 test -e "insert into t4 values(_cp932'ƒ\');" +flush logs; +rename table t3 to t03, t4 to t04; +--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL --default-character-set=utf8 +# original and recovered data must be equal +select HEX(f) from t03; +select HEX(f) from t3; +select HEX(f) from t04; +select HEX(f) from t4; + + + # clean up -drop table t1, t2; +drop table t1, t2, t03, t04, t3, t4; # End of 4.1 tests --- 1.8/mysql-test/r/mysqlbinlog2.result 2005-09-30 11:58:20 +03:00 +++ 1.9/mysql-test/r/mysqlbinlog2.result 2006-02-09 16:23:03 +02:00 @@ -22,6 +22,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -52,6 +53,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "a"); SET INSERT_ID=2; @@ -78,6 +80,7 @@ SET TIMESTAMP=1579609946; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "d"); SET INSERT_ID=5; @@ -95,6 +98,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -119,6 +123,7 @@ SET TIMESTAMP=1579609944; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "c"); SET INSERT_ID=4; @@ -139,6 +144,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -159,6 +165,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -181,6 +188,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -196,6 +204,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "a"); SET INSERT_ID=2; @@ -215,6 +224,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -229,6 +239,7 @@ SET TIMESTAMP=1579609946; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "d"); SET INSERT_ID=5; @@ -239,6 +250,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -253,6 +265,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -284,6 +297,7 @@ SET TIMESTAMP=1579609944; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "c"); SET INSERT_ID=4; @@ -297,6 +311,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -311,6 +326,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -331,6 +347,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -361,6 +378,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "a"); SET INSERT_ID=2; @@ -387,6 +405,7 @@ SET TIMESTAMP=1579609946; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "d"); SET INSERT_ID=5; @@ -404,6 +423,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -428,6 +448,7 @@ SET TIMESTAMP=1579609944; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "c"); SET INSERT_ID=4; @@ -448,6 +469,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -468,6 +490,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -490,6 +513,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -505,6 +529,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "a"); SET INSERT_ID=2; @@ -524,6 +549,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -538,6 +564,7 @@ SET TIMESTAMP=1579609946; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "d"); SET INSERT_ID=5; @@ -548,6 +575,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -562,6 +590,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -593,6 +622,7 @@ SET TIMESTAMP=1579609944; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "c"); SET INSERT_ID=4; @@ -606,6 +636,7 @@ SET TIMESTAMP=1579609943; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t1 values(null, "f"); # End of log file @@ -620,6 +651,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; @@ -640,6 +672,7 @@ SET TIMESTAMP=1579609942; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; create table t1 (a int auto_increment not null primary key, b char(3)); SET INSERT_ID=1; --- 1.20/mysql-test/r/rpl_charset.result 2005-09-30 11:58:20 +03:00 +++ 1.21/mysql-test/r/rpl_charset.result 2006-02-09 16:23:04 +02:00 @@ -180,6 +180,7 @@ SET TIMESTAMP=1000000000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; drop database if exists mysqltest2; SET TIMESTAMP=1000000000; @@ -187,9 +188,11 @@ SET TIMESTAMP=1000000000; create database mysqltest2 character set latin2; SET TIMESTAMP=1000000000; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30; create database mysqltest3; SET TIMESTAMP=1000000000; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64; drop database mysqltest3; SET TIMESTAMP=1000000000; @@ -199,6 +202,7 @@ create table t1 (a int auto_increment primary key, b varchar(100)); SET INSERT_ID=1; SET TIMESTAMP=1000000000; +/*!\C cp850 */; SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64; insert into t1 (b) values(@@character_set_server); SET INSERT_ID=2; @@ -214,6 +218,7 @@ SET TIMESTAMP=1000000000; insert into t1 (b) values(@@collation_connection); SET TIMESTAMP=1000000000; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64; truncate table t1; SET INSERT_ID=1; @@ -224,6 +229,7 @@ insert into t1 (b) values(LEAST("Müller","Muffler")); SET INSERT_ID=3; SET TIMESTAMP=1000000000; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64; insert into t1 (b) values(@@collation_connection); SET INSERT_ID=4; @@ -241,9 +247,11 @@ drop database mysqltest3; use test; SET TIMESTAMP=1000000000; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30; CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255)); SET TIMESTAMP=1000000000; +/*!\C koi8r */; SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30; INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ'); # End of log file --- 1.4/mysql-test/r/ctype_ucs_binlog.result 2005-09-30 11:58:20 +03:00 +++ 1.5/mysql-test/r/ctype_ucs_binlog.result 2006-02-09 16:23:03 +02:00 @@ -15,6 +15,7 @@ SET TIMESTAMP=10000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; insert into t2 values (@v); # End of log file --- 1.5/mysql-test/r/user_var-binlog.result 2005-10-12 00:58:17 +03:00 +++ 1.6/mysql-test/r/user_var-binlog.result 2006-02-09 16:23:04 +02:00 @@ -21,6 +21,7 @@ SET TIMESTAMP=10000; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET @@session.sql_mode=0; +/*!\C latin1 */; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; INSERT INTO t1 VALUES(@`a b`); SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`; --- 1.4/mysql-test/r/mysql.result 2005-10-06 17:54:24 +03:00 +++ 1.5/mysql-test/r/mysql.result 2006-02-09 16:23:03 +02:00 @@ -59,3 +59,13 @@ test unlock tables; drop table t1; +ソ +ソ +c_cp932 +ソ +ソ +ソ +ソ +ソ +ソ +ソ --- 1.4/mysql-test/t/mysql.test 2005-10-08 02:48:56 +03:00 +++ 1.5/mysql-test/t/mysql.test 2006-02-09 16:23:04 +02:00 @@ -41,3 +41,16 @@ unlock tables; drop table t1; +# +# BUG#16217 - MySQL client misinterpretes multi-byte char as escape `\' +# + +# new command \C or charset +--exec $MYSQL --default-character-set=utf8 test -e "\C cp932 \g" +--exec $MYSQL --default-character-set=cp932 test -e "charset utf8;" + +# its usage to switch internally in mysql to requested charset +--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; set @@session.character_set_client= cp932; select 'ƒ\'; create table t1 (c_cp932 TEXT CHARACTER SET cp932); insert into t1 values('ƒ\'); select * from t1; drop table t1;" +--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; set character_set_client= cp932; select 'ƒ\'" +--exec $MYSQL --default-character-set=utf8 test -e "/*charset cp932 */; set character_set_client= cp932; select 'ƒ\'" +--exec $MYSQL --default-character-set=utf8 test -e "/*!\C cp932 */; set character_set_client= cp932; select 'ƒ\'"