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 'ƒ\'"
| Thread |
|---|
| • bk commit into 5.0 tree (aelkin:1.2034) BUG#16217 | Andrei Elkin | 9 Feb |