diff options
-rw-r--r-- | mysql-test/r/partition_charset.result | 18 | ||||
-rw-r--r-- | mysql-test/t/partition_charset.test | 21 | ||||
-rw-r--r-- | sql/sql_partition.cc | 3 |
3 files changed, 42 insertions, 0 deletions
diff --git a/mysql-test/r/partition_charset.result b/mysql-test/r/partition_charset.result new file mode 100644 index 00000000000..665e5d55f8f --- /dev/null +++ b/mysql-test/r/partition_charset.result @@ -0,0 +1,18 @@ +drop table if exists t1; +set names utf8; +create table t1 (s1 int) +partition by list (s1) +(partition c values in (1), +partition Ç values in (3)); +insert into t1 values (1),(3); +select * from t1; +s1 +1 +3 +flush tables; +set names latin1; +select * from t1; +s1 +1 +3 +drop table t1; diff --git a/mysql-test/t/partition_charset.test b/mysql-test/t/partition_charset.test new file mode 100644 index 00000000000..27d0dc87b89 --- /dev/null +++ b/mysql-test/t/partition_charset.test @@ -0,0 +1,21 @@ +# +# Test for character set related things in combination +# with the partition storage engine +# +-- source include/have_partition.inc + +--disable_warnings +drop table if exists t1; +--enable_warnings + +set names utf8; +create table t1 (s1 int) + partition by list (s1) + (partition c values in (1), + partition Ç values in (3)); +insert into t1 values (1),(3); +select * from t1; +flush tables; +set names latin1; +select * from t1; +drop table t1; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 056db71c63b..c98f8f915b9 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -3630,11 +3630,13 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf, Item *thd_free_list= thd->free_list; bool result= TRUE; partition_info *part_info; + CHARSET_INFO *old_character_set_client= thd->variables.character_set_client; LEX *old_lex= thd->lex; LEX lex; DBUG_ENTER("mysql_unpack_partition"); thd->lex= &lex; + thd->variables.character_set_client= system_charset_info; lex_start(thd, part_buf, part_info_len); /* We need to use the current SELECT_LEX since I need to keep the @@ -3760,6 +3762,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf, end: thd->free_list= thd_free_list; thd->lex= old_lex; + thd->variables.character_set_client= old_character_set_client; DBUG_RETURN(result); } |