diff --git a/mysql-test/suite/rpl/r/rpl_ctype_latin1.result b/mysql-test/suite/rpl/r/rpl_ctype_latin1.result new file mode 100644 index 00000000000..909aa639522 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_ctype_latin1.result @@ -0,0 +1,28 @@ +include/master-slave.inc +[connection master] +# +# Start of 10.2 tests +# +# +# MDEV-14249 Wrong character set info of Query_log_event and the query in Query_log_event constructed by different charsets cause error when slave apply the event. +# +SET NAMES latin1; +CREATE TABLE `tё` (`tё` INT); +CREATE VIEW `vё` AS SELECT 'vё'; +CREATE PROCEDURE `pё`() SELECT 'pё'; +connection slave; +SHOW TABLES LIKE 't%'; +Tables_in_test (t%) +tё +SHOW TABLES LIKE 'v%'; +Tables_in_test (v%) +vё +SHOW PROCEDURE STATUS LIKE 'p%'; +Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation +test pё PROCEDURE root@localhost ts ts DEFINER latin1 latin1_swedish_ci latin1_swedish_ci +connection master; +DROP TABLE `tё`; +DROP VIEW `vё`; +DROP PROCEDURE `pё`; +connection slave; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_ctype_latin1.test b/mysql-test/suite/rpl/t/rpl_ctype_latin1.test new file mode 100644 index 00000000000..a736d1a6485 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_ctype_latin1.test @@ -0,0 +1,40 @@ +--disable_warnings +--source include/master-slave.inc +--enable_warnings + +--echo # +--echo # Start of 10.2 tests +--echo # + + +--echo # +--echo # MDEV-14249 Wrong character set info of Query_log_event and the query in Query_log_event constructed by different charsets cause error when slave apply the event. +--echo # + +# +# The below tests uses a sequence of bytes 0xD191, +# which in a utf8 console looks like ё (CYRILIC SMALL LETTER YO). +# Don't be mislead. This sequence is used in latin1 context and +# represents a sequence of two characters: +# U+00D1 CAPITAL LATIN LETTER N WITH TILDE (_latin1 0xD1) +# U+2018 LEFT SINGLE QUOTATION MARK (_latin1 0x91) +# + +SET NAMES latin1; +CREATE TABLE `tё` (`tё` INT); +CREATE VIEW `vё` AS SELECT 'vё'; +CREATE PROCEDURE `pё`() SELECT 'pё'; + +--sync_slave_with_master +SHOW TABLES LIKE 't%'; +SHOW TABLES LIKE 'v%'; +--replace_column 5 ts 6 ts +SHOW PROCEDURE STATUS LIKE 'p%'; + +--connection master +DROP TABLE `tё`; +DROP VIEW `vё`; +DROP PROCEDURE `pё`; +--sync_slave_with_master + +--source include/rpl_end.inc diff --git a/sql/sp.cc b/sql/sp.cc index fcbf4dc43d4..ef4d0996b78 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -1277,8 +1277,8 @@ log: { thd->clear_error(); - String log_query; - log_query.set_charset(system_charset_info); + StringBuffer<128> log_query(thd->variables.character_set_client); + DBUG_ASSERT(log_query.charset()->mbminlen == 1); if (!show_create_sp(thd, &log_query, sp->m_type, diff --git a/sql/sql_view.cc b/sql/sql_view.cc index bba79642d87..c3bd16b974b 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -643,7 +643,8 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views, if (!res && mysql_bin_log.is_open()) { - String buff; + StringBuffer<128> buff(thd->variables.character_set_client); + DBUG_ASSERT(buff.charset()->mbminlen == 1); const LEX_STRING command[3]= {{ C_STRING_WITH_LEN("CREATE ") }, { C_STRING_WITH_LEN("ALTER ") },